2009-05-24 10 views

Odpowiedz

20

Oto przykład (zaczerpnięte z here):

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

Od here ...

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

Również znacznie więcej 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

Działa to dla mnie:

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

lub z powłoki:

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

lub ze środowiska zmienna (powinna działać, b ut kiedy testowane było źle):

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

Obiekt zwrócony przez obiekt "CreateObject" ("WScript.Network" '] (https://msdn.microsoft.com/en-us/library/s6wt333f (v = vs.84) .aspx) nie zapewnia generycznego dostęp do zmiennych środowiskowych, po prostu wydaje się, że 3 wartości są właściwościami, które są również odzwierciedlone w zmiennych środowiskowych: 'NazwaKomputera',' NazwaUżytkownika' i 'NazwaUżytkownika' .Ale powód, że twój ostatni przykład nie działa, to' WshShell. Środowisko "jest takie samo jak' WshShell.Environment ("System") ', a'% USERNAME% 'nie jest zdefiniowany w zasięgu _system_. – mklement0

4

Istniejące odpowiedzi są pomocne, ale pozwól mi próba pragmatyczne podsumowanie:

Zazwyczaj chcesz bieżącego procesu definicji zmienną środowiska:

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

jest to równoważnik kwasu (zauważyć nieobecność % aro und zmienna nazwa):

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

Zastrzeżenie: Nie pominąć ("Process) udział: jeśli to zrobisz, dostaniesz definicję systemu zakres w zmiennej; patrz poniżej.

.ExpandEnvironmentStrings jest koncepcyjnie prostsze i bardziej elastyczne: To może rozwinąć dowolne struny osadzone (% -enclosed) odniesienia dla środowiska zmienna; np .:

CreateObject("WScript.Shell").ExpandEnvironmentStrings("My name is %USERNAME%") 

W rzadkich przypadkach może być dostępu definicje zmiennych środowiskowych z szczegółowego zakresu (inny niż obecny proces'S).

sScope = "System" ' May be: "Process", "User", "Volatile", "System" 
    CreateObject("WScript.Shell").Environment(sScope).Item("TEMP") 

Uwaga: Jak podano powyżej, pomijając wartości domyślne argumentów zakres zakresu System.

Zastrzeżenie: Dostęp do wartości w ten sposób nie rozwinąć to: wartości Środowisko-zmienne mogą być zagnieżdżona: mogą odnosić się do innych zmiennych środowiskowych.
W powyższym przykładzie zwrócona wartość to %SystemRoot%\TEMP, która zawiera nierozwinięte odniesienie do %SystemRoot%.
Aby powiększyć wynik, należy go przekazać na .ExpandEnvironmentStrings(), jak pokazano powyżej.