21

是否可以在 Windows 脚本主机 (WSH) VBS 脚本中读取系统环境变量?

(我正在使用 Windows Scripting Host 编写一个 VBScript 来执行 Cruise Control 的任务,并且想要获取项目构建 URL。)

4

5 回答 5

28

这是一个示例(取自此处):

Set oShell = CreateObject( "WScript.Shell" )
user=oShell.ExpandEnvironmentStrings("%UserName%")
comp=oShell.ExpandEnvironmentStrings("%ComputerName%")
WScript.Echo user & " " & comp
于 2009-05-24T21:57:03.617 回答
7

这里...

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的更多详细信息。

于 2009-05-24T21:55:59.827 回答
7

现有的答案都很有帮助,但让我尝试一个务实的总结

通常,您需要当前进程的环境变量定义

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(),如上所示。

于 2016-12-20T18:03:43.377 回答
6
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
于 2012-12-20T22:37:22.240 回答
-1

这对我有用:

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")
于 2015-03-09T14:12:56.800 回答