Windows Scripting Host(WSH)VBSスクリプトでシステム環境変数を読み取ることはできますか?
(私はクルーズコントロールのタスクにWindows Scripting Hostを使用してVBScriptを書いていて、プロジェクトのビルドURLを取得したいと考えています。)
以下に例を示します( here から取得):
Set oShell = CreateObject( "WScript.Shell" )
user=oShell.ExpandEnvironmentStrings("%UserName%")
comp=oShell.ExpandEnvironmentStrings("%ComputerName%")
WScript.Echo user & " " & comp
から ここ ...
Set WshShell = WScript.CreateObject("WScript.Shell")
Set WshProccessEnv = WshShell.Environment("Process")
Set WshSysEnv = WshShell.Environment("System")
Wscript.Echo WshSysEnv("NUMBER_OF_PROCESSORS")
Wscript.Echo WshProccessEnv("Path")
また、はるかに TechNetの詳細 。
既存の回答はすべて役に立ちますが、プラグマティックサマリーを試してみましょう:
通常、必要なのは現在のプロセス環境変数の定義です。
_CreateObject("WScript.Shell").ExpandEnvironmentStrings("%TEMP%")
_
これは、(変数名の前後に_%
_がないことに注意してください)と同等です。
_CreateObject("WScript.Shell").Environment("Process").Item("TEMP")
_
警告:_("Process)
_の部分は省略しないでください。省略すると、変数のsystemスコープの定義が表示されます。下記参照。
_.ExpandEnvironmentStrings
_は概念的にシンプルで柔軟です:任意埋め込み(_%
_- enclosed)環境で文字列を拡張できます-変数参照;例えば。:
_CreateObject("WScript.Shell").ExpandEnvironmentStrings("My name is %USERNAME%")
_
まれに特定のスコープから環境変数定義にアクセスする必要がある場合があります(現在のプロセス以外)。
_ sScope = "System" ' May be: "Process", "User", "Volatile", "System"
CreateObject("WScript.Shell").Environment(sScope).Item("TEMP")
_
注:上記のように、スコープ引数を省略すると、デフォルトでSystem
スコープになります。
警告:この方法で値にアクセスすることはできませんexpand it:環境変数の値はnestedである可能性がありますother環境変数。
上記の例では、戻り値は_%SystemRoot%\TEMP
_であり、これには_%SystemRoot%
_へのnexpanded参照が含まれています。
上記のように、結果を展開するには、それを.ExpandEnvironmentStrings()
に渡します。
Set WshShell = CreateObject("WScript.Shell")
Set WshEnv = WshShell.Environment
WScript.Echo "WINDIR=" & WshEnv.Item("WINDIR") & vbCrLf & vbCrLf
Set WshShell = CreateObject("WScript.Shell")
WScript.Echo "Environment System:" & vbCrLf & _
"..............................................."
For Each IEnv In WshShell.Environment("System")
WScript.Echo IEnv
Next
WScript.Echo vbCrLf & "Environment User:" & vbCrLf & _
"..............................................."
For Each IEnv In WshShell.Environment("User")
WScript.Echo IEnv
Next
WScript.Echo vbCrLf & "Environment Volatile:" & vbCrLf & _
"..............................................."
For Each IEnv In WshShell.Environment("Volatile")
WScript.Echo IEnv
Next
WScript.Echo vbCrLf & "Environment Process:" & vbCrLf & _
"..............................................."
For Each IEnv In WshShell.Environment("Process")
WScript.Echo IEnv
Next