是否可以讀取Windows腳本主機(WSH)VBS腳本中的系統環境變量?我可以在vbscript WSH腳本中選擇環境變量嗎?
而且(我使用Windows腳本宿主任務的巡航控制系統和要拿起項目生成URL寫一個VBScript)
是否可以讀取Windows腳本主機(WSH)VBS腳本中的系統環境變量?我可以在vbscript WSH腳本中選擇環境變量嗎?
而且(我使用Windows腳本宿主任務的巡航控制系統和要拿起項目生成URL寫一個VBScript)
這裏的(從here採取)的例子:
Set oShell = CreateObject("WScript.Shell")
user=oShell.ExpandEnvironmentStrings("%UserName%")
comp=oShell.ExpandEnvironmentStrings("%ComputerName%")
WScript.Echo user & " " & comp
從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。
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%")
或環境變量(它應該工作,b UT當我測試,這是不對的!):
Set WshShell = CreateObject("WScript.Shell")
Set WshEnv = WshShell.Environment
MsgBox "USERNAME=" & WshEnv.Item("USERNAME")
現有的答案都是有益的,但讓我嘗試務實總結:
通常情況下,你想的當前進程的的定義環境變量:
CreateObject("WScript.Shell").ExpandEnvironmentStrings("%TEMP%")
這是相當於(注意沒有%
ARO的UND變量名):
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")
注意:如上所述,省略scope參數默認爲System
範圍。
買者:訪問值這樣不擴大它:環境變量的值可以是嵌套:可以參考其他環境變量。
在上面的示例中,返回值爲%SystemRoot%\TEMP
,其中包含未擴展的對%SystemRoot%
的引用。
要展開結果,請將其傳遞到.ExpandEnvironmentStrings()
,如上所示。
[CreateObject(「WScript.Network」`](https://msdn.microsoft.com/en-us/library/s6wt333f(v = vs.84).aspx)返回的對象不提供通用的環境變量訪問,它只是暴露了3個值作爲也反映在環境變量中的屬性:`ComputerName`,`UserDomain`和`UserName`。你最後一個例子不起作用的原因是`WshShell。 Environment`與`WshShell.Environment(「System」)`相同,並且'%USERNAME%`沒有在_system_作用域中定義。 – mklement0 2016-12-20 18:09:37