vbscript environment-variables wsh

¿Puedo recoger variables de entorno en el script WSH vbscript?



environment-variables (5)

¿Es posible leer las variables de entorno del sistema en un script VBS de Windows Scripting Host (WSH)?

(Estoy escribiendo un VBScript usando Windows Scripting Host para la tarea de un control de crucero y quiero seleccionar la URL de compilación del proyecto).


Aquí hay un ejemplo (tomado de here ):

Set oShell = CreateObject( "WScript.Shell" ) user=oShell.ExpandEnvironmentStrings("%UserName%") comp=oShell.ExpandEnvironmentStrings("%ComputerName%") WScript.Echo user & " " & comp


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

Además, mucho más detalle en TechNet .


Esto funciona para mí:

Dim objNetwork Set objNetwork = CreateObject("WScript.Network") MsgBox objNetwork.UserName

o desde la cáscara:

Set wshShell = WScript.CreateObject( "WScript.Shell" ) strUserName = wshShell.ExpandEnvironmentStrings( "%USERNAME%" )

o de la variable de entorno (debería funcionar, pero cuando lo probé estaba mal):

Set WshShell = CreateObject("WScript.Shell") Set WshEnv = WshShell.Environment MsgBox "USERNAME=" & WshEnv.Item("USERNAME")


Las respuestas existentes son todas útiles, pero permítanme intentar un resumen pragmático :

Típicamente, usted quiere la definición del proceso actual de una variable de entorno :

CreateObject("WScript.Shell").ExpandEnvironmentStrings("%TEMP%")

Esto es equivalente a (note la ausencia de % alrededor del nombre de la variable):

CreateObject("WScript.Shell").Environment("Process").Item("TEMP")

Advertencia : no omita la parte ("Process) : si lo hace, obtendrá la definición de la variable del alcance del sistema ; consulte a continuación.

.ExpandEnvironmentStrings es conceptualmente más simple y más flexible : puede expandir cadenas arbitrarias con referencias de variables de entorno incrustadas ( % encerradas); p.ej:

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

En raras ocasiones es posible que tenga que acceder a definiciones de variables de entorno desde un ámbito específico (distinto del proceso actual).

sScope = "System" '' May be: "Process", "User", "Volatile", "System" CreateObject("WScript.Shell").Environment(sScope).Item("TEMP")

Nota: Como se indicó anteriormente, omitir los argumentos del alcance por defecto al alcance del System .

Advertencia : el acceso a un valor de esta manera no lo expande : los valores de variable de entorno se pueden anidar : pueden hacer referencia a otras variables de entorno.
En el ejemplo anterior, el valor de retorno es %SystemRoot%/TEMP , que contiene la referencia no expandida a %SystemRoot% .
Para expandir el resultado, páselo a .ExpandEnvironmentStrings() , como se demostró anteriormente.


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