Modification des données de Registre
La classe StdRegProv du fournisseur de registre système pour WMI a des méthodes qui effectuent les opérations suivantes :
Créer ou supprimer des clés de registre.
Créez ou supprimez des valeurs nommées, appelées entrées lorsqu’elles se trouvent sous des clés.
Utilisez le nom d’une nouvelle valeur et SetBinaryValue, SetDWORDValue, SetExpandedStringValue, SetMultiStringValue ou SetStringValue pour créer une valeur nommée. Utilisez DeleteValue pour supprimer une valeur nommée.
Modifiez les valeurs nommées.
Utilisez le nom d’une valeur et les méthodes Set (identifiées dans l’élément à puces précédent) pour modifier les valeurs nommées existantes sous une clé. Vous devez connaître le nom d’une valeur pour la modifier. Si vous ne connaissez pas les noms de valeur sous une clé, utilisez la méthode EnumValues pour obtenir les noms.
Les sections suivantes sont abordées dans cette rubrique :
- Création d’une clé de registre à l’aide de VBScript
- Création d’une valeur de registre nommée à l’aide de PowerShell et DE VBScript
Création d’une clé de registre à l’aide de VBScript
Étant donné que le Registre est la base de données de configuration centrale pour le système d’exploitation, les applications et les services, soyez prudent lorsque vous écrivez des modifications apportées aux valeurs de registre ou supprimez des clés.
Notes
Vous ne pouvez pas surveiller la sous-clé HKEY_CLASSES_ROOT de HKEY_CURRENT_USER (HKCU). La surveillance HKEY_USERS n’est pas recommandée, car les sous-clés apparaissent et disparaissent à mesure que les ruches sont chargées.
Les exemples de code suivants montrent comment créer une clé de registre et une sous-clé.
HKEY_LOCAL_MACHINE = &H80000002
strComputer = "."
Set ObjRegistry = GetObject("winmgmts:{impersonationLevel = impersonate}!\\" & strComputer & "\root\default:StdRegProv")
strPath = "SOFTWARE\MyKey\MySubKey"
Return = objRegistry.CreateKey(HKEY_LOCAL_MACHINE, strPath)
If Return <> 0 Then
WScript.Echo "The operation failed." & Err.Number
WScript.Quit
Else
wScript.Echo "New registry key created" & VBCRLF & "HKLM\SOFTWARE\MYKey\"
End If
$HKEY_LOCAL_MACHINE = 2147483650
$strComputer = "."
$strPath = "SOFTWARE\MyKey\MySubKey"
$reg = [wmiclass]"\\$strComputer\root\default:StdRegprov"
[void]$reg.CreateKey($HKEY_LOCAL_MACHINE, $strPath)
Création d’une valeur de registre nommée à l’aide de PowerShell et VBScript
L’exemple de code suivant montre comment créer une valeur nommée appelée MultiStringValue sous la cléHKEY_LOCAL_MACHINE\SOFTWARE\MyKey\MySubKey créée par le script précédent. Le script appelle StdRegProv.SetMultiStringValue pour écrire des valeurs de chaîne dans une nouvelle valeur nommée.
const HKEY_LOCAL_MACHINE = &H80000002
strComputer = "."
Set objRegistry = _
GetObject("winmgmts:{impersonationLevel=impersonate}!\\" _
& strComputer & "\root\default:StdRegProv")
strKeyPath = "SOFTWARE\MyKey\MySubKey"
strValueName = "MultiStringValue"
arrStringValues = Array("one", "two","three", "four")
objRegistry.SetMultiStringValue HKEY_LOCAL_MACHINE, strKeyPath,_
strValueName, arrStringValues
' Read the values that were just written
objRegistry.GetMultiStringValue HKEY_LOCAL_MACHINE, strKeyPath,_
strValueName, arrStringValues
For Each strValue in arrStringValues
WScript.Echo strValue
Next
$HKEY_LOCAL_MACHINE = 2147483650
$strComputer = "."
$strPath = "SOFTWARE\MyKey\MySubKey"
$strValueName = "MultiStringValue"
$arrStringValues = @("one", "two","three", "four")
$reg = [wmiclass]"\\$strComputer\root\default:StdRegprov"
[void]$reg.SetMultiStringValue($HKEY_LOCAL_MACHINE, $strKeyPath, $strValueName, $arrStringValues)
$multiValues = $reg.GetMultiStringValue($HKEY_LOCAL_MACHINE, $strKeyPath, $strValueName)
$multiValues.sValue
À l’aide de WMI, vous ne pouvez pas définir la sécurité d’accès sur une clé de registre. Toutefois, la méthode StdRegProv.CheckAccess compare les paramètres de sécurité de l’utilisateur actuel au descripteur de sécurité sur une clé de registre pour déterminer si l’utilisateur dispose d’une autorisation spécifique, telle que KEY_SET_VALUE.