我可以在vbscript WSH脚本中提取环境变量吗?

我可以在vbscript WSH脚本中提取环境变量吗?,vbscript,environment-variables,wsh,Vbscript,Environment Variables,Wsh,是否可以在Windows脚本主机(WSH)VBS脚本中读取系统环境变量 (我正在为巡航控制任务使用Windows脚本主机编写VBScript,并希望获取项目构建URL。)来自 还有更多。这里有一个例子(摘自): 这对我很有用: Dim objNetwork Set objNetwork = CreateObject("WScript.Network") MsgBox objNetwork.UserName 或从外壳: Set wshShell = WScript.CreateObject( "

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

(我正在为巡航控制任务使用Windows脚本主机编写VBScript,并希望获取项目构建URL。)

来自

还有更多。

这里有一个例子(摘自):

这对我很有用:

Dim objNetwork
Set objNetwork = CreateObject("WScript.Network")
MsgBox objNetwork.UserName
或从外壳:

Set wshShell = WScript.CreateObject( "WScript.Shell" )
strUserName = wshShell.ExpandEnvironmentStrings( "%USERNAME%" )
或者来自环境变量(它应该可以工作,但当我测试时它是错误的!):


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

CreateObject("WScript.Shell").ExpandEnvironmentStrings("%TEMP%")
通常,您需要当前进程对环境变量的定义

CreateObject("WScript.Shell").ExpandEnvironmentStrings("%TEMP%")
这相当于(注意变量名周围没有
%
):

注意事项:不要忽略
(“过程)
部分:如果省略,您将获得变量的系统范围定义;请参见下文

.ExpandEnvironmentStrings
在概念上更简单、更灵活
:它可以通过嵌入(
%
-封闭)的环境变量引用扩展任意字符串;例如:

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

在极少数情况下,您可能必须从特定范围访问环境变量定义(当前进程的定义除外)

注意:如上所述,省略scope参数默认为
系统
范围

注意事项:以这种方式访问值不会将其展开:环境变量值可以嵌套:它们可以引用其他环境变量。
在上面的示例中,返回值是
%SystemRoot%\TEMP
,其中包含对
%SystemRoot%
的未扩展引用
要展开结果,请将其传递给
.ExpandEnvironmentStrings()
,如上所示。

不提供通用环境变量访问,它只是碰巧将3个值作为属性公开,这些属性也反映在环境变量中:
ComputerName
UserDomain
UserName
。上一个示例不起作用的原因是
WshShell.environmentment
与WshShell.Environment(“系统”)相同,并且系统范围中未定义
%USERNAME%
Set WshShell = CreateObject("WScript.Shell")
Set WshEnv = WshShell.Environment
MsgBox "USERNAME=" & WshEnv.Item("USERNAME")
CreateObject("WScript.Shell").ExpandEnvironmentStrings("%TEMP%")
CreateObject("WScript.Shell").Environment("Process").Item("TEMP")
CreateObject("WScript.Shell").ExpandEnvironmentStrings("My name is %USERNAME%")
  sScope = "System" ' May be: "Process", "User", "Volatile", "System"
  CreateObject("WScript.Shell").Environment(sScope).Item("TEMP")