- Сообщения
- 7,981
- Реакции
- 6,756
Автор: Сергей Васин
Внесение изменений в реестр компьютера – довольно часто встречающаяся в работе администратора задача. В случае, если компьютеров немного и это разовое изменение, это можно сделать через редактор реестра, подключившись к реестру удаленного компьютера. Если же изменение требуется внести на ощутимое число компьютеров или если изменения должны вноситься в определенное время либо при определенном событии, то в этом случае на помощь может прийти WMI класс StdRegProv. В данной статье мы рассмотрим использование класса StdRegProv из PowerShell.
StdRegProv отличается от большинства классов WMI в том, каким способом осуществляется взаимодействие с данным классом. Получить экземпляр объекта класса StdRegProv можно несколькими способами:
либо
Содержимое переменной $srp.
Хотя в более ранних операционных системах (WindowsXP, WindowsServer 2003) этот класс находился только в пространстве имен ‘root\default’, в нынешнем поколении операционок (Windows 7) он также находится в пространстве имен ‘root\cimv2’, которое в большинстве случаев является пространством имен по умолчанию.
Для указания нужного раздела реестра во всех методах этого класса используется некоторое числовое значение, соответствующее определенному разделу.
Эти значения приведены в таблице:
[table=head]Название раздела |Шестнадцатеричное значение |Десятичное значение
HKEY_CLASSES_ROOT |0x80000000| 2147483648
HKEY_CURRENT_USER |0x80000001| 2147483649
HKEY_LOCAL_MACHINE |0x80000002| 2147483650
HKEY_USERS |0x80000003| 2147483651
HKEY_CURRENT_CONFIG |0x80000005| 2147483653
HKEY_DYN_DATA (Windows 9x) |0x80000006| 2147483655
[/table]
Стоит отметить, что на удаленных компьютерах вы не сможете использовать раздел HKEY_CURRENT_USER. Это связано с тем, что провайдер реестра работает под учетной записью LocalService, а не LocalSystem. Хотя, на локальном компьютере он будет доступен для использования.
Определим переменную $hklm, которая будет содержать значение 2147483650, соответствующее разделу реестра HKEY_LOCAL_MACHINE.
Хочу заметить, что в этой статье мы не будем рассматривать методы, имеющие отношение к разрешениям на доступ к записям реестра, такие как CheckAccess, GetSecurityDescriptor и SetSecurityDescriptor. Все же остальные методы, имеющие отношение к считыванию и записи значений и ключей реестра будут рассмотрены.
Итак, методы, предлагаемые нам классом WMIStdRegProv.
EnumKey
Этот метод используется для перечисления ключей реестра, являющихся дочерними по отношению к ключу, заданному переменной subKeyName, находящемуся в разделе, заданном переменной defKey.
Переменная defKey, это числовое значение, соответствующее определенному разделу реестра.
Переменная subKeyName – это переменная типа string, указывающая путь к ключу реестра, список дочерних ключей которого мы хотим получить.
Метод возвращает объект, имеющий, кроме системных, два свойства: ReturnValue и sNames.
ReturnValue – это числовое значение, указывающее успешность выполнения метода. Если выполнение прошло без ошибок – значение этого свойства равно нулю, если нет – его значение содержит числовой код ошибки.
sNames – это массив строк, содержащий список ключей, дочерних по отношению к ключу, указанному в параметрах метода.
Присваивание переменной $result объекта, возвращаемого методом EnumKey.
Значение свойства ReturnValue.
Значение свойства sNames.
EnumValues
Если предыдущий метод возвращает только ключи реестра, данный метод возвращает список записей реестра и их типов. Данный метод выводит только имена и типы записей, но не выводит их значения.
В качестве параметров он также принимает значение defKey, указывающее раздел реестра и строковое значение subKeyName, указывающее путь к ключу, список записей которого мы хотим получить.
Метод возвращает объект содержащий три свойства (кроме системных): ReturnValue, sNames и Types.
ReturnValue – это, как и в предыдущем методе, числовое значение, указывающее успешность выполнения метода.
sNames – это массив строк, содержащий список записей реестра в ключе, находящемся по указанному пути (subKeyName) в указанном разделе (defKey).
Types – это массив числовых значений, соответствующих типам записей реестра.
Список типов записей реестра и соответствующих им числовых значений.
[table=head]Тип записи |Обозначение типа записи |Числовое значение
String |REG_SZ| 1
Expandable String |REG_EXPAND_SZ| 2
Binary |REG_BINARY| 3
DWORD |REG_DWORD| 4
Multi-String |REG_MULTI_SZ| 7
QWORD |REG_QWORD| 11
[/table]
То есть, если свойство sNames состоит из пяти элементов и мы хотим узнать тип третьего элемента в списке, нам нужно определить значение третьего элемента в массиве, содержащемся в свойстве Types и сопоставить его с таблицей типов записей реестра.
В данной случае все записи являются записями типа REG_DWORD.
Присваивание переменной $result объекта, возвращаемого методом EnumValues.
Значение свойства ReturnValue.
Значение свойства sNames.
Значение свойства Types.
CreateKey
Этот метод позволяет создать ключ или иерархию ключей в реестре
В качестве входных параметров метод принимает параметры раздела реестра (defKey) и строковый параметр пути, который нужно создать (subKeyName).
Например, чтобы создать ключ ‘Vendor’ под ключом ‘Software’ в разделе HKEY_LOCAL_MACHINE, команда должна выглядеть так:
Если же мы хотим создать иерархию ключей, например ‘Vendor\Product’, то нам не обязательно вызывать данный метод дважды. Мы может создать оба этих ключа при помощи одной команды:
Данный метод возвращает объект, содержащий одно свойство, которое может быть нам полезно – это свойство ReturnValue, содержащее код, указывающий успешно ли выполнен метод.
Внесение изменений в реестр компьютера – довольно часто встречающаяся в работе администратора задача. В случае, если компьютеров немного и это разовое изменение, это можно сделать через редактор реестра, подключившись к реестру удаленного компьютера. Если же изменение требуется внести на ощутимое число компьютеров или если изменения должны вноситься в определенное время либо при определенном событии, то в этом случае на помощь может прийти WMI класс StdRegProv. В данной статье мы рассмотрим использование класса StdRegProv из PowerShell.
StdRegProv отличается от большинства классов WMI в том, каким способом осуществляется взаимодействие с данным классом. Получить экземпляр объекта класса StdRegProv можно несколькими способами:
PowerShell:
$srp = [wmiclass]"\\computername\root\default:StdRegProv"
либо
PowerShell:
$srp = Get-WMIObject –Namespace 'root\default' –list –ComputerName 'computername' |
Where-Object {$_.name –eq 'StdRegProv'}
Содержимое переменной $srp.
Хотя в более ранних операционных системах (WindowsXP, WindowsServer 2003) этот класс находился только в пространстве имен ‘root\default’, в нынешнем поколении операционок (Windows 7) он также находится в пространстве имен ‘root\cimv2’, которое в большинстве случаев является пространством имен по умолчанию.
Для указания нужного раздела реестра во всех методах этого класса используется некоторое числовое значение, соответствующее определенному разделу.
Эти значения приведены в таблице:
[table=head]Название раздела |Шестнадцатеричное значение |Десятичное значение
HKEY_CLASSES_ROOT |0x80000000| 2147483648
HKEY_CURRENT_USER |0x80000001| 2147483649
HKEY_LOCAL_MACHINE |0x80000002| 2147483650
HKEY_USERS |0x80000003| 2147483651
HKEY_CURRENT_CONFIG |0x80000005| 2147483653
HKEY_DYN_DATA (Windows 9x) |0x80000006| 2147483655
[/table]
Стоит отметить, что на удаленных компьютерах вы не сможете использовать раздел HKEY_CURRENT_USER. Это связано с тем, что провайдер реестра работает под учетной записью LocalService, а не LocalSystem. Хотя, на локальном компьютере он будет доступен для использования.
Определим переменную $hklm, которая будет содержать значение 2147483650, соответствующее разделу реестра HKEY_LOCAL_MACHINE.
PowerShell:
$hklm = 2147483650
Хочу заметить, что в этой статье мы не будем рассматривать методы, имеющие отношение к разрешениям на доступ к записям реестра, такие как CheckAccess, GetSecurityDescriptor и SetSecurityDescriptor. Все же остальные методы, имеющие отношение к считыванию и записи значений и ключей реестра будут рассмотрены.
Итак, методы, предлагаемые нам классом WMIStdRegProv.
EnumKey
PowerShell:
$srp.EnumKey(defKey,subKeyName)
Этот метод используется для перечисления ключей реестра, являющихся дочерними по отношению к ключу, заданному переменной subKeyName, находящемуся в разделе, заданном переменной defKey.
Переменная defKey, это числовое значение, соответствующее определенному разделу реестра.
Переменная subKeyName – это переменная типа string, указывающая путь к ключу реестра, список дочерних ключей которого мы хотим получить.
Метод возвращает объект, имеющий, кроме системных, два свойства: ReturnValue и sNames.
ReturnValue – это числовое значение, указывающее успешность выполнения метода. Если выполнение прошло без ошибок – значение этого свойства равно нулю, если нет – его значение содержит числовой код ошибки.
sNames – это массив строк, содержащий список ключей, дочерних по отношению к ключу, указанному в параметрах метода.
Присваивание переменной $result объекта, возвращаемого методом EnumKey.
Значение свойства ReturnValue.
Значение свойства sNames.
EnumValues
PowerShell:
$srp.EnumValues(defKey,subKeyName)
Если предыдущий метод возвращает только ключи реестра, данный метод возвращает список записей реестра и их типов. Данный метод выводит только имена и типы записей, но не выводит их значения.
В качестве параметров он также принимает значение defKey, указывающее раздел реестра и строковое значение subKeyName, указывающее путь к ключу, список записей которого мы хотим получить.
Метод возвращает объект содержащий три свойства (кроме системных): ReturnValue, sNames и Types.
ReturnValue – это, как и в предыдущем методе, числовое значение, указывающее успешность выполнения метода.
sNames – это массив строк, содержащий список записей реестра в ключе, находящемся по указанному пути (subKeyName) в указанном разделе (defKey).
Types – это массив числовых значений, соответствующих типам записей реестра.
Список типов записей реестра и соответствующих им числовых значений.
[table=head]Тип записи |Обозначение типа записи |Числовое значение
String |REG_SZ| 1
Expandable String |REG_EXPAND_SZ| 2
Binary |REG_BINARY| 3
DWORD |REG_DWORD| 4
Multi-String |REG_MULTI_SZ| 7
QWORD |REG_QWORD| 11
[/table]
То есть, если свойство sNames состоит из пяти элементов и мы хотим узнать тип третьего элемента в списке, нам нужно определить значение третьего элемента в массиве, содержащемся в свойстве Types и сопоставить его с таблицей типов записей реестра.
В данной случае все записи являются записями типа REG_DWORD.
Присваивание переменной $result объекта, возвращаемого методом EnumValues.
Значение свойства ReturnValue.
Значение свойства sNames.
Значение свойства Types.
CreateKey
Этот метод позволяет создать ключ или иерархию ключей в реестре
PowerShell:
$srp.CreateKey(defKey,subKeyName)
В качестве входных параметров метод принимает параметры раздела реестра (defKey) и строковый параметр пути, который нужно создать (subKeyName).
Например, чтобы создать ключ ‘Vendor’ под ключом ‘Software’ в разделе HKEY_LOCAL_MACHINE, команда должна выглядеть так:
PowerShell:
$srp.CreateKey($hklm,"Software\Vendor")
Если же мы хотим создать иерархию ключей, например ‘Vendor\Product’, то нам не обязательно вызывать данный метод дважды. Мы может создать оба этих ключа при помощи одной команды:
PowerShell:
$srp.CreateKey($hklm,"Software\Vendor\Product")
Данный метод возвращает объект, содержащий одно свойство, которое может быть нам полезно – это свойство ReturnValue, содержащее код, указывающий успешно ли выполнен метод.
Последнее редактирование: