Изменение данных реестра

Класс поставщика системного реестраStdRegProv для WMI содержит методы, которые выполняют следующие действия:

  • Создание или удаление разделов реестра.

    Используйте CreateKey или DeleteKey.

  • Создание или удаление именованных значений, которые называются записями, когда они находятся под ключами.

    Используйте имя нового значения и SetBinaryValue, SetDWORDValue, SetExpandedStringValue, SetMultiStringValue или SetStringValue для создания именованного значения. Используйте DeleteValue для удаления именованного значения.

  • Изменение именованных значений.

    Используйте имя значения и методы Set (указанные в предыдущем маркированных элементах), чтобы изменить существующие именованные значения под ключом. Чтобы изменить его, необходимо знать имя значения. Если вы не знаете имена значений в ключе, используйте метод EnumValues для получения имен.

В этой статье рассматриваются следующие разделы:

Создание раздела реестра с помощью VBScript

Так как реестр является центральной базой данных конфигурации для операционной системы, приложений и служб, соблюдайте осторожность при записи изменений в значения реестра или удалении разделов.

Примечание

Вы не можете отслеживать подраздел HKEY_CLASSES_ROOTHKEY_CURRENT_USER(HKCU). Мониторинг HKEY_USERS не рекомендуется, так как подразделы отображаются и исчезают при загрузке кустов.

 

В следующих примерах кода показано, как создать раздел реестра и подраздел .

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)

Создание именованного значения реестра с помощью PowerShell и VBScript

В следующем примере кода показано, как создать именованное значение с именем MultiStringValue вразделеmySubKeyHKEY_LOCAL_MACHINE\SOFTWARE\\, который создает предыдущий скрипт. Скрипт вызывает StdRegProv.SetMultiStringValue для записи строковых значений в новое именованное значение.

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

С помощью инструментария WMI невозможно настроить безопасность доступа для раздела реестра. Однако метод StdRegProv.CheckAccess сравнивает параметры безопасности текущего пользователя с дескриптором безопасности в разделе реестра, чтобы определить, имеет ли пользователь определенное разрешение, например KEY_SET_VALUE.