是否可以在 Windows 脚本主机 (WSH) VBS 脚本中读取系统环境变量?
(我正在使用 Windows Scripting Host 编写一个 VBScript 来执行 Cruise Control 的任务,并且想要获取项目构建 URL。)
是否可以在 Windows 脚本主机 (WSH) VBS 脚本中读取系统环境变量?
(我正在使用 Windows Scripting Host 编写一个 VBScript 来执行 Cruise Control 的任务,并且想要获取项目构建 URL。)
这是一个示例(取自此处):
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)
部分:如果这样做,您将获得系统范围的变量定义;见下文。
.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()
,如上所示。
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
这对我有用:
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")