Partager via


Tâches WMI : Registre

Les tâches WMI pour le Registre créent et modifient des clés et des valeurs de Registre. Pour obtenir d’autres exemples, consultez TechNet ScriptCenter à https://www.microsoft.com/technet.

Les exemples de script présentés dans cette rubrique obtiennent des données uniquement à partir de l’ordinateur local. Pour plus d’informations sur l’utilisation du script pour obtenir des données à partir d’ordinateurs distants, consultez Connexion à WMI sur un ordinateur distant.

La procédure suivante décrit comment exécuter un script.

Pour exécuter un script

  1. Copiez le code et enregistrez-le dans un fichier avec une extension .vbs, telle que filename.vbs. Vérifiez que votre éditeur de texte n’ajoute pas d’extension .txt au fichier.
  2. Ouvrez une fenêtre d’invite de commandes et accédez au répertoire où vous avez enregistré le fichier.
  3. Tapez cscript filename.vbs à l’invite de commandes.
  4. Si vous ne pouvez pas accéder à un journal des événements, vérifiez si vous exécutez à partir d’une invite de commandes Avec élévation de privilèges. Certains journaux d’événements, tels que le journal des événements de sécurité, peuvent être protégés par les contrôles d’accès utilisateur (UAC).

Note

Par défaut, cscript affiche la sortie d’un script dans la fenêtre d’invite de commandes. Étant donné que les scripts WMI peuvent produire de grandes quantités de sortie, vous pouvez rediriger la sortie vers un fichier. Tapez cscript filename.vbs > outfile.txt à l’invite de commandes pour rediriger la sortie du script filename.vbs vers outfile.txt.

Le tableau suivant répertorie les exemples de script qui peuvent être utilisés pour obtenir différents types de données à partir de l’ordinateur local.

Comment faire... Classes ou méthodes WMI
... lire les valeurs de clé de Registre à l’aide de WMI ? Utilisez la classe StdRegProv, située dans l’espace de noms root\default. Vous ne pouvez pas obtenir d’instances de cette classe, car le fournisseur de Registre système est une méthode et un fournisseur d’événements uniquement. Toutefois, vous pouvez obtenir des données de Registre par le biais de méthodes telles que EnumKey ou EnumValue. Le Win32_Registry, situé dans l’espace de noms root\cimv2, obtient des données sur le Registre dans son ensemble, telles que la taille qu’il est.
VB
const HKEY_CURRENT_USER = &H80000001
strComputer = "."
Set oReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\default:StdRegProv")
strKeyPath = "Console"
strValueName = "HistoryBufferSize"
oReg.GetDWORDValue HKEY_CURRENT_USER,strKeyPath,strValueName,dwValue
WScript.Echo "Current History Buffer Size: " & dwValue
PowerShell
$HKEY_CURRENT_USER =2147483649
$computer ='.'
$reg = [WMIClass]"ROOT\DEFAULT:StdRegProv"
$Key = "Console"
$Value = "HistoryBufferSize"
$results = $reg.GetDWORDValue($HKEY_CURRENT_USER, $Key, $value)
"Current History Buffer Size: {0}" -f $results.uValue
... créer une clé de Registre ?

Utilisez la classestdRegProv, située dans l’espace de noms root\default, et la méthode CreateKey.

VB
              
              const HKEY_LOCAL_MACHINE = &H80000002 strComputer = « . » Set objReg=GetObject( « winmgmts :{impersonationLevel=impersonate} !\\ » & strComputer & "\root\default :StdRegProv ») 

strKeyPath = "SOFTWARE\NewKey" objReg.CreateKey HKEY_LOCAL_MACHINE,strKeyPath WScript.Echo "Created registry key HKEY_LOCAL_MACHINE\SOFTWARE\NewKey"

PowerShell
$HKEY_Local_Machine =2147483650 
$computer ='.'
$reg = [WMIClass]"ROOT\DEFAULT:StdRegProv"
$Key     = "SOFTWARE\NewKey"
$results   = $reg.CreateKey($HKEY_LOCAL_MACHINE, $Key)
If ($results.Returnvalue -eq 0) {"Key created"} 
... créer une valeur de Registre sous une clé ?

Utilisez la classe StdRegProv, située dans l’espace de noms root\default et la méthode CreateKey. Utilisez ensuite l’une des méthodes Set, en fonction du type de données du Registre, la valeur, telle que la SetDWORDValue. Les méthodes Set créent une valeur s’il n’existe pas déjà. Pour plus d’informations, consultez Mappage d’un type de données de Registre à un type de données WMI.

VB
Const HKEY_LOCAL_MACHINE = &H80000002
strKeyPath = "SOFTWARE\NewKey"
strComputer = "."
Set objReg=GetObject( "winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\default:StdRegProv")
strValueName = "Example_Expanded_String_Value"
strValue = "%PATHEXT%"
objReg.SetExpandedStringValue HKEY_LOCAL_MACHINE,strKeyPath,strValueName,strValue
WScript.Echo "Example expanded_String_Value at " & "HKEY_LOCAL_MACHINE\SOFTWARE\NewKey"
PowerShell
$HKEY_Local_Machine =2147483650 
$computer ='.'
$reg = [WMIClass]"ROOT\DEFAULT:StdRegProv"
$ValueName = "Example_Expanded_String_Value"
$Value     = "%PATHEXT%"
$Key       = "SOFTWARE\NewKey"
$results   = $reg.SetExpandedStringValue($HKEY_LOCAL_MACHINE, $Key, $ValueName, $Value)
If ($results.Returnvalue -eq 0) {"Value created"}
... évitez d’obtenir une erreur de classe non valide lors de la tentative d’écriture d’un script pour lire le Registre ?

Utilisez l’espace de noms root\default lors de l’accès à la classe StdRegProv. StdRegProv ne fait pas partie de l’espace de noms cimv2, c’est pourquoi une erreur « Classe non valide » est générée si vous essayez de vous connecter à « root\cimv2 :StdRegProv ».

VB
Const HKEY_CURRENT_USER = &H80000001
strComputer = "."
Set oReg=GetObject( "winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\default:StdRegProv") 
strKeyPath = "Console"
strValueName = "HistoryBufferSize"
oReg.GetDWORDValue HKEY_CURRENT_USER, strKeyPath, strValueName, dwValue
Wscript.Echo "Current History Buffer Size: " & dwValue
... vérifier la sécurité sur une clé de Registre spécifique ?

Utilisez la classe StdRegProv, située dans l’espace de noms root\default et la méthodeCheckAccess. Vous pouvez uniquement vérifier les droits d’accès pour l’utilisateur actuel qui exécute le script ou l’application. Vous ne pouvez pas vérifier les droits d’accès pour un autre utilisateur spécifié.

... lire et écrire des valeurs de Registre binaires ?

Utilisez la classe StdRegProv, située dans l’espace de noms « Root\Default » et les méthodes GetBinaryValue et SetBinaryValue. Les valeurs de Registre qui apparaissent dans l’utilitaire RegEdt32 sous la forme d’une série de valeurs hexadécimales d’octets sont au format de données REG_BINARY. Pour plus d’informations, consultez Mappage d’un type de données de Registre à un type de données WMI. L’exemple de code VBScript suivant crée une clé avec une valeur binaire. La valeur binaire est fournie dans le tableau d’octets iValues spécifié dans Hex.

VB
              
              const HKEY_LOCAL_MACHINE = &H80000002 strKeyPath = « SOFTWARE\NewKey » strComputer = « . » iValues = Array(&H01,&Ha2,&H10) Set oReg=GetObject(« winmgmts :{impersonationLevel=impersonate} !\\ » & strComputer & "\root\default :StdRegProv ») oReg.CreateKey HKEY_LOCAL_MACHINE,strKeyPath strKeyPath = « SOFTWARE\NewKey » BinaryValueName = « Example Binary Value » 

oReg.SetBinaryValue HKEY_LOCAL_MACHINE,strKeyPath,BinaryValueName,iValues

Le script suivant lit la valeur binaire.

VB
const HKEY_LOCAL_MACHINE = &H80000002 
strKeyPath = "SOFTWARE\NewKey"
strValueName = "Example Binary Value"
strComputer = "."
dim iValues(3)
Set oReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\default:StdRegProv")
oReg.GetBinaryValue HKEY_LOCAL_MACHINE,strKeyPath,strValueName,iValues
For i = lBound(iValues) to uBound(iValues)
Wscript.Echo iValues(i)
Next
PowerShell
$HKEY_Local_Machine =2147483650 
$computer ='.'
$reg = [WMIClass]"ROOT\DEFAULT:StdRegProv"
$ValueName = "Example Binary Value"
$Values     = @(0x54, 0x46, 0x4C)
$Key       = "SOFTWARE\NewKey"
$results   = $reg.GetBinaryValue($HKEY_LOCAL_MACHINE, $Key, $ValueName)
Foreach ($byte in $results.uvalue) {"{0}" -f $byte.tostring("x")}
... lire et écrire des valeurs de Registre qui contiennent plusieurs chaînes ?

Utilisez la classe StdRegProv, située dans l’espace de noms root\default et les méthodes GetMultiStringValue et SetMultiStringValue. Les clés de Registre qui apparaissent dans l’utilitaire RegEdt32 sous la forme d’une série de chaînes séparées par des espaces sont au format de données REG_MULTI_SZ. Pour plus d’informations, consultez Mappage d’un type de données de Registre à un type de données WMI. L’exemple de code VBScript suivant crée une clé et une nouvelle valeur multistring.

VB
const HKEY_LOCAL_MACHINE = &H80000002
strKeyPath = "SOFTWARE\NewKey"
MultValueName = "Example Multistring Value"
strComputer = "."
iValues = Array("string1", "string2")
Set oReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\default:StdRegProv")
oReg.CreateKey HKEY_LOCAL_MACHINE,strKeyPath
oReg.SetMultiStringValue HKEY_LOCAL_MACHINE,strKeyPath,MultValueName,iValues
PowerShell
$HKEY_Local_Machine =2147483650 
$computer ='.'
$reg = [WMIClass]"ROOT\DEFAULT:StdRegProv"
$Key       = "SOFTWARE\NewKey"
$ValueName = "Example MultiString Value"
$Values     = @("Thomas", "Susan", "Rebecca")
$Key       = "SOFTWARE\NewKey"
$results   = $reg.SetMultiStringValue($HKEY_LOCAL_MACHINE, $Key, $ValueName, $Values)
If ($results.Returnvalue -eq 0) {"Value Set"} 

Le script suivant lit la valeur multistring.

VB
const HKEY_LOCAL_MACHINE = &H80000002
strKeyPath = "SOFTWARE\NewKey"
strComputer = "."
iValues = Array("string1", "string2")
Set oReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\default:StdRegProv")
MultValueName = "Example Multistring Value"
oReg.GetMultiStringValue HKEY_LOCAL_MACHINE,strKeyPath,MultValueName,iValues
For Each strValue In iValues
WScript.echo strValue
Next
PowerShell
# Define Constants
$HKEY_Local_Machine =2147483650 
$computer ='.'
$reg = [WMIClass]"ROOT\DEFAULT:StdRegProv"
$Key       = "SOFTWARE\NewKey"
$ValueName = "Example MultiString Value"
$results   = $reg.GetMultiStringValue($HKEY_LOCAL_MACHINE, $Key, $ValueName)
$results.svalue
... supprimer une clé de Registre ?

Utilisez la classe StdRegProv, située dans l’espace de noms root\default et les méthodes DeleteKey.

PowerShell
$HKEY_Local_Machine =2147483650 
$computer ='.'
$reg = [WMIClass]"ROOT\DEFAULT:StdRegProv"
$Key     = "SOFTWARE\NewKey"
$results   = $reg.DeleteKey($HKEY_LOCAL_MACHINE, $Key)
If ($results.Returnvalue -eq 0) {"Key Removed"} 

tâches WMI pour les scripts et les applications

exemples d’applications WMI C++

TechNet ScriptCenter

modifier le du Registre système

StdRegProv