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 les données uniquement à partir de l’ordinateur local. Pour plus d’informations sur l’utilisation du script afin d’obtenir des données provenant d’ordinateurs distants, consultez Connexion à WMI sur un ordinateur distant.

La procédure suivante explique comment exécuter un script.

Pour exécuter un script

  1. Copiez le code, puis enregistrez-le dans un fichier avec l’extension .vbs, par exemple nomfichier.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, puis accédez au répertoire où vous avez enregistré le fichier.
  3. Tapez cscript nomfichier.vbs à l’invite de commandes.
  4. Si vous ne pouvez pas accéder à un journal des événements, vérifiez si vous exécutez la commande à partir d’une invite de commandes avec élévation de privilèges. Certains journaux des événements, par exemple le journal des événements de sécurité, peuvent être protégés par la fonctionnalité UAC (contrôle de compte d’utilisateur).

Notes

Par défaut, cscript affiche la sortie d’un script dans la fenêtre d’invite de commandes. Dans la mesure où les scripts WMI peuvent produire de grandes quantités de données en sortie, vous pouvez être amené à rediriger la sortie vers un fichier. Tapez cscript nomfichier.vbs > fichiersortie.txtà l’invite de commandes pour rediriger la sortie du scriptnomfichier.vbs vers fichiersortie.txt.

Le tableau suivant liste des exemples de script qui peuvent être utilisés pour obtenir divers types de données à partir de l’ordinateur local.

Comment puis-je... 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 obtenir aucune instance de cette classe, car le fournisseur de registre système est uniquement un fournisseur de méthodes et d’événements. Toutefois, vous pouvez obtenir des données de registre via des méthodes telles que EnumKey ou EnumValue. Win32_Registry, situé dans l’espace de noms root\cimv2, obtient des données sur le registre dans son ensemble, comme par exemple sa taille.
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 classe StdRegProv, 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 . Ensuite, utilisez l’une des méthodes Set, en fonction du type de données de registre dont la valeur est, par exemple SetDWORDValue. Les méthodes Set créent une valeur si elle n’existe pas déjà. Pour plus d’informations, consultez Mappage d’un type de données du 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"}
... éviter 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 » sera 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éthode CreateKey . Vous pouvez uniquement vérifier les droits d’accès de l’utilisateur actuel qui exécute le script ou l’application. Vous ne pouvez pas vérifier les droits d’accès d’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 du 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 du registre à un type de données WMI. L’exemple de code VBScript suivant crée une nouvelle 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 la méthode 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

Modification du registre du système

StdRegProv