代码之家  ›  专栏  ›  技术社区  ›  mike nelson

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

  •  17
  • mike nelson  · 技术社区  · 16 年前

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

    (我正在使用Windows脚本宿主为巡航控制的任务编写一个vbscript,并希望获取项目生成URL。)

    5 回复  |  直到 7 年前
        1
  •  23
  •   M4N    16 年前

    以下是一个例子(摘自 here ):

    Set oShell = CreateObject( "WScript.Shell" )
    user=oShell.ExpandEnvironmentStrings("%UserName%")
    comp=oShell.ExpandEnvironmentStrings("%ComputerName%")
    WScript.Echo user & " " & comp
    
        2
  •  7
  •   mklement0    8 年前

    here

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

    而且,更多 detail on TechNet .

        3
  •  5
  •   mklement0    7 年前

    现有的答案都很有用,但是让我尝试一下 语用总结 :

    通常,你想要 这个 当前进程 环境变量的定义 :

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

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

    告诫 :以这种方式访问值不会 扩大 IT:环境变量值可以是 嵌套的 :它们可以参考 其他 环境变量。
    在上面的示例中,返回值是 %SystemRoot%\TEMP ,其中包含 未膨胀的 参考 %SystemRoot% .
    要扩展结果,请将其传递给 .ExpandEnvironmentStrings() 如上所示。

        4
  •  3
  •   Daniel    12 年前
    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
    
        5
  •  -1
  •   Rafiki    10 年前

    这对我很有用:

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