Подтвердить что ты не робот

Могу ли я выбрать переменные среды в vbscript WSH script?

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

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

4b9b3361

Ответ 1

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

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

Ответ 2

От здесь...

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.

Ответ 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

Ответ 4

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

Как правило, требуется определение текущего процесса переменной среды:

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

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

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.

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

Ответ 5

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

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