2009-05-24 6 views

Répondre

20

Voici un exemple (tiré de here):

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

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

En outre, beaucoup plus detail on TechNet.

3
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 
-1

Cela fonctionne pour moi:

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

ou de la coquille:

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

ou de l'environnement variable (ça devrait marcher, b ut quand je l'ai testé avait tort):

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

L'objet [retourné par 'CreateObject (" WScript.Network "'] (https://msdn.microsoft.com/fr-fr/library/s6wt333f (v = vs.84) .aspx) ne fournit pas de générique l'accès à la variable d'environnement, il arrive juste d'exposer 3 valeurs comme des propriétés qui sont également reflétées dans les variables d'environnement: 'ComputerName',' UserDomain', et 'UserName' La raison pour laquelle votre dernier exemple ne fonctionne pas est' WshShell. Environment' est le même que 'WshShell.Environment (" System ")', et '% USERNAME%' n'est pas défini dans la portée _system_. – mklement0

4

Les réponses existantes sont utiles, mais laissez-moi tenter une résumé pragmatique:

En général, vous voulez de l'actuel processus définition une variable d'environnement:

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

Ceci est l'équivalent de (notez l'absence de % aro und le nom de la variable):

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

caveat: Ne pas omettre la ("Process) partie: si vous le faites, vous aurez la définition de la portée du système de la variable; voir ci-dessous.

.ExpandEnvironmentStrings est conceptuellement plus simple et plus souple: Il peut se développer arbitraires avec des chaînes intégrées (% -enclosed) références de l'environnement variable; .: par exemple

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


En de rares occasions, vous pouvez avoir à accès définitions de l'environnement variable d'un champ spécifique (autre que celui du processus en cours).

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

Note: Comme indiqué ci-dessus, en omettant les valeurs par défaut d'argument de portée à la portée System.

caveat: L'accès à une valeur de cette façon ne développer il: les valeurs de l'environnement variables peut être imbriquée: ils peuvent se référer à d'autres variables d'environnement.
Dans l'exemple ci-dessus, la valeur renvoyée est %SystemRoot%\TEMP, qui contient la référence non expansée référence à %SystemRoot%.
Pour développer le résultat, transmettez-le à .ExpandEnvironmentStrings(), comme démontré ci-dessus.

Questions connexes