Могу ли я подобрать переменные среды в сценарии WSH vbscript? - PullRequest
18 голосов
/ 25 мая 2009

Возможно ли прочитать системные переменные среды в сценарии VBS Windows Scripting Host (WSH)?

(я пишу VBScript с использованием Windows Scripting Host для задачи для круиз-контроля и хочу получить URL-адрес сборки проекта.)

Ответы [ 5 ]

25 голосов
/ 25 мая 2009

Вот пример (взято из здесь ):

Set oShell = CreateObject( "WScript.Shell" )
user=oShell.ExpandEnvironmentStrings("%UserName%")
comp=oShell.ExpandEnvironmentStrings("%ComputerName%")
WScript.Echo user & " " & comp
7 голосов
/ 25 мая 2009

С здесь ...

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 .

5 голосов
/ 20 декабря 2016

Все существующие ответы полезны, но позвольте мне попробовать прагматическое резюме :

Обычно требуется определение текущего процесса *1007* переменной окружения :

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

Это эквивалент (обратите внимание на отсутствие % вокруг имени переменной):

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

Предупреждение : Не пропускайте часть ("Process): если вы это сделаете, вы получите определение переменной system scope; см. ниже.

.ExpandEnvironmentStrings концептуально проще и более гибок : он может расширять произвольных строк с внедренными (% -накрытыми) ссылками переменных среды; e.g.:

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

В редких случаях вам может потребоваться получить доступ к определениям переменных среды из определенной области (кроме текущего процесса).

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

Примечание. Как указано выше, для аргумента scope по умолчанию используется область System.

Предостережение : такой способ доступа к значению не не расширяет it: значения переменных среды могут быть вложенными : они могут ссылаться на other переменные окружения.
В приведенном выше примере возвращаемое значение равно %SystemRoot%\TEMP, которое содержит нерасширенную ссылку на %SystemRoot%.
Чтобы расширить результат, передайте его в .ExpandEnvironmentStrings(), как показано выше.

4 голосов
/ 21 декабря 2012
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
0 голосов
/ 09 марта 2015

Это работает для меня:

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

или из скорлупы:

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

или из переменной окружения (это должно работать, но когда я проверял, это было неправильно!):

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