2009-05-24 10 views
16

Windows Scripting Host(WSH)VBSスクリプトでシステム環境変数を読み取ることはできますか?vbscript WSHスクリプトで環境変数を選択できますか?

は(私はクルーズコントロールのためのタスクのためのWindowsスクリプティングホストを使用して、プロジェクトのビルドURLをピックアップするVBScriptを書いています。)hereから

答えて

20

ここで(hereから取られた)例を示します

Set oShell = CreateObject("WScript.Shell") 
user=oShell.ExpandEnvironmentStrings("%UserName%") 
comp=oShell.ExpandEnvironmentStrings("%ComputerName%") 
WScript.Echo user & " " & comp 
7

...

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") 

をまた、多くのmore detail on TechNet

3
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 
-1

これは私の作品:

Dim objNetwork 
Set objNetwork = CreateObject("WScript.Network") 
MsgBox objNetwork.UserName 

またはシェルから:

Set wshShell = WScript.CreateObject("WScript.Shell") 
strUserName = wshShell.ExpandEnvironmentStrings("%USERNAME%") 

や環境から変数(それは動作するはずです、b私はそれが間違っていたテストUT):!

Set WshShell = CreateObject("WScript.Shell") 
Set WshEnv = WshShell.Environment 
MsgBox "USERNAME=" & WshEnv.Item("USERNAME") 
+0

[CreateObject( "WScript.Network" '(https://msdn.microsoft.com/en-us/library/s6wt333f(v = vs.84).aspx)によって返されるオブジェクトは、ジェネリック'ComputerName'、' UserDomain'、 'UserName'などの環境変数に反映されるプロパティとして3つの値を公開するだけです。最後の例がうまくいかない理由は、' WshShell。 Environment'は 'WshShell.Environment(" System ")と同じで、'%USERNAME% 'は_system_スコープに定義されていません。 – mklement0

4

既存の答えは、すべての便利ですが、私は実用的な要約しようとしてみましょう:通常

を、あなたはの現在のプロセスの定義をしたいです環境変数

CreateObject("WScript.Shell").ExpandEnvironmentStrings("%TEMP%") 

これは% AROの不在に注意してください(と同等です)変数名をUND:

CreateObject("WScript.Shell").Environment("Process").Item("TEMP") 

警告("Process)一部を省略しないでください:あなたが行う場合は、変数のシステム範囲の定義を取得します。下記参照。

.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スコープに範囲引数のデフォルトを省略します。

警告:を展開しませんこの方法で値にアクセスするには、それは:環境変数の値は、ネストされたことができます。彼らはの環境変数を参照することができます。
上記の例では、戻り値は%SystemRoot%\TEMPであり、が展開されています。を参照して%SystemRoot%を参照しています。
結果を展開するには、上記のとおり、.ExpandEnvironmentStrings()に渡します。

関連する問題