在 Windows 脚本宿主(WSH)VBS 脚本中,读取系统环境变量是否可行?
我正在使用 Windows 脚本宿主编写 VBScript 任务,想要获取项目构建的 URL。
在 Windows 脚本宿主(WSH)VBS 脚本中,读取系统环境变量是否可行?
我正在使用 Windows 脚本宿主编写 VBScript 任务,想要获取项目构建的 URL。
以下是一个例子(来自这里):
Set oShell = CreateObject( "WScript.Shell" )
user=oShell.ExpandEnvironmentStrings("%UserName%")
comp=oShell.ExpandEnvironmentStrings("%ComputerName%")
WScript.Echo user & " " & comp
CreateObject("WScript.Shell").ExpandEnvironmentStrings("%TEMP%")
%
):CreateObject("WScript.Shell").Environment("Process").Item("TEMP")
注意:不要省略("Process)
部分,否则你将得到系统范围的变量定义; 详见下文。
.ExpandEnvironmentStrings
的概念更简单、更灵活:它可以扩展带有嵌入式(%
包含)环境变量引用的任意字符串;例如:
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
或者从Shell中:
Set wshShell = WScript.CreateObject( "WScript.Shell" )
strUserName = wshShell.ExpandEnvironmentStrings( "%USERNAME%" )
或者从环境变量中获取(应该可以工作,但当我测试时出错了!):
Set WshShell = CreateObject("WScript.Shell")
Set WshEnv = WshShell.Environment
MsgBox "USERNAME=" & WshEnv.Item("USERNAME")
CreateObject("WScript.Network")
返回的对象并不提供通用的环境变量访问,它只是将3个值作为属性公开,这些属性也反映在环境变量中:ComputerName
、UserDomain
和UserName
。你的最后一个示例无法工作的原因是WshShell.Environment
与WshShell.Environment("System")
相同,并且%USERNAME%
未在系统范围内定义。 - mklement0