• Администрация SafeZone приветствует вас на нашем форуме!
    Если вы больше не желаете видеть рекламу при просмотре тем и сообщений - то достаточно просто зарегистрироваться. Для зарегистрированных пользователей реклама не отображается.

Статья [PowerShell] Использование класса WMI StdRegProv для работы с реестром ОС Windows

Dragokas

Very kind Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
5,434
Симпатии
5,293
#1
Автор: Сергей Васин

Внесение изменений в реестр компьютера – довольно часто встречающаяся в работе администратора задача. В случае, если компьютеров немного и это разовое изменение, это можно сделать через редактор реестра, подключившись к реестру удаленного компьютера. Если же изменение требуется внести на ощутимое число компьютеров или если изменения должны вноситься в определенное время либо при определенном событии, то в этом случае на помощь может прийти WMI класс StdRegProv. В данной статье мы рассмотрим использование класса StdRegProv из PowerShell.

StdRegProv отличается от большинства классов WMI в том, каким способом осуществляется взаимодействие с данным классом. Получить экземпляр объекта класса StdRegProv можно несколькими способами:

PowerShell:
$srp = [wmiclass]"\\computername\root\default:StdRegProv"

1.jpg

либо
PowerShell:
$srp = Get-WMIObject –Namespace 'root\default' –list –ComputerName 'computername' |
Where-Object {$_.name –eq 'StdRegProv'}
2.jpg

Содержимое переменной $srp.

3.jpg

Хотя в более ранних операционных системах (WindowsXP, WindowsServer 2003) этот класс находился только в пространстве имен ‘root\default’, в нынешнем поколении операционок (Windows 7) он также находится в пространстве имен ‘root\cimv2’, которое в большинстве случаев является пространством имен по умолчанию.

Для указания нужного раздела реестра во всех методах этого класса используется некоторое числовое значение, соответствующее определенному разделу.

Эти значения приведены в таблице:


Стоит отметить, что на удаленных компьютерах вы не сможете использовать раздел HKEY_CURRENT_USER. Это связано с тем, что провайдер реестра работает под учетной записью LocalService, а не LocalSystem. Хотя, на локальном компьютере он будет доступен для использования.

Определим переменную $hklm, которая будет содержать значение 2147483650, соответствующее разделу реестра HKEY_LOCAL_MACHINE.
PowerShell:
$hklm = 2147483650
4.jpg


Хочу заметить, что в этой статье мы не будем рассматривать методы, имеющие отношение к разрешениям на доступ к записям реестра, такие как CheckAccess, GetSecurityDescriptor и SetSecurityDescriptor. Все же остальные методы, имеющие отношение к считыванию и записи значений и ключей реестра будут рассмотрены.



Итак, методы, предлагаемые нам классом WMIStdRegProv.

EnumKey
PowerShell:
$srp.EnumKey(defKey,subKeyName)
5.jpg

Этот метод используется для перечисления ключей реестра, являющихся дочерними по отношению к ключу, заданному переменной subKeyName, находящемуся в разделе, заданном переменной defKey.

Переменная defKey, это числовое значение, соответствующее определенному разделу реестра.

Переменная subKeyName – это переменная типа string, указывающая путь к ключу реестра, список дочерних ключей которого мы хотим получить.

6.jpg

Метод возвращает объект, имеющий, кроме системных, два свойства: ReturnValue и sNames.

ReturnValue – это числовое значение, указывающее успешность выполнения метода. Если выполнение прошло без ошибок – значение этого свойства равно нулю, если нет – его значение содержит числовой код ошибки.

sNames – это массив строк, содержащий список ключей, дочерних по отношению к ключу, указанному в параметрах метода.

Присваивание переменной $result объекта, возвращаемого методом EnumKey.

7.jpg

Значение свойства ReturnValue.

8.jpg

Значение свойства sNames.

9.jpg

EnumValues
PowerShell:
$srp.EnumValues(defKey,subKeyName)
10.jpg


Если предыдущий метод возвращает только ключи реестра, данный метод возвращает список записей реестра и их типов. Данный метод выводит только имена и типы записей, но не выводит их значения.

В качестве параметров он также принимает значение defKey, указывающее раздел реестра и строковое значение subKeyName, указывающее путь к ключу, список записей которого мы хотим получить.

11.jpg

Метод возвращает объект содержащий три свойства (кроме системных): ReturnValue, sNames и Types.

ReturnValue – это, как и в предыдущем методе, числовое значение, указывающее успешность выполнения метода.

sNames – это массив строк, содержащий список записей реестра в ключе, находящемся по указанному пути (subKeyName) в указанном разделе (defKey).

Types – это массив числовых значений, соответствующих типам записей реестра.

Список типов записей реестра и соответствующих им числовых значений.


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

В данной случае все записи являются записями типа REG_DWORD.

Присваивание переменной $result объекта, возвращаемого методом EnumValues.

12.jpg

Значение свойства ReturnValue.

13.jpg

Значение свойства sNames.

14.jpg

Значение свойства Types.

15.jpg

CreateKey

Этот метод позволяет создать ключ или иерархию ключей в реестре
PowerShell:
$srp.CreateKey(defKey,subKeyName)
16.jpg


В качестве входных параметров метод принимает параметры раздела реестра (defKey) и строковый параметр пути, который нужно создать (subKeyName).

Например, чтобы создать ключ ‘Vendor’ под ключом ‘Software’ в разделе HKEY_LOCAL_MACHINE, команда должна выглядеть так:
PowerShell:
$srp.CreateKey($hklm,"Software\Vendor")
Если же мы хотим создать иерархию ключей, например ‘Vendor\Product’, то нам не обязательно вызывать данный метод дважды. Мы может создать оба этих ключа при помощи одной команды:
PowerShell:
$srp.CreateKey($hklm,"Software\Vendor\Product")
17.jpg


Данный метод возвращает объект, содержащий одно свойство, которое может быть нам полезно – это свойство ReturnValue, содержащее код, указывающий успешно ли выполнен метод.

18.jpg
 
Последнее редактирование:

Dragokas

Very kind Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
5,434
Симпатии
5,293
#2
DeleteKey

Этот метод удаляет определенный ключ в указанном разделе реестра.
PowerShell:
$srp.DeleteKey(degKey,subKeyName)
1.jpg


В качестве входных параметров метод принимает параметры раздела реестра (defKey) и строковый параметр пути к ключу, который требуется удалить (subKeyName).

Данный метод удаляет тот ключ, который указан в параметре subKeyName последним.

Например, мы вызываем метод DeleteKey со следующими параметрами:
PowerShell:
$srp.DeleteKey($hklm,"Software\Vendor\Product")
В данном случае результатом выполнения метода будет удаление ключа ‘Product’, находящегося под ключом ‘Vendor’.

Метод без подтверждения удаляет все записи реестра находящиеся в указанном ключе.

В случае же, если под данным ключом находится другой ключ реестра, метод не производит удаление ключей и возвращает объект, свойство ReturnValue которого обладает значением 5.

2.jpg

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

Метод возвращает объект, содержащий свойство ReturnValue, значение которого указывает, успешно ли выполнен метод. Значение 0 указывает на то, что метод был выполнен без ошибок, любое другое значение свидетельствует о каких-либо факторах, препятствующих успешному выполнению метода.

3.jpg

DeleteValue

Метод позволяет удалить определенную запись реестра, находящуюся в указанном ключе.
PowerShell:
$srp.DeleteValue(defKey,subKeyName,deleteValue)
4.jpg


Данный метод принимает три параметра, числовое значение раздела реестра (defKey), строковое значение, указывающее расположение ключа (subKeyName), в котором находится запись, требующая удаления и имя самой записи (deleteValue), также в строковом формате.

При вызове метода со следующими параметрами:
PowerShell:
$srp.DeleteValue($hklm, "Software\Vendor\Product","Entry")
мы удалим запись ‘Entry’, находящуюся к ключе ‘Software\Vendor\Product’ раздела реестра HKEY_LOCAL_MACHINE.

Для определения, успешно ли выполнен метод мы, как и при использовании вышеописанных методов, можем воспользоваться значением свойства ReturnValue объекта, возвращаемого данным методом.

5.jpg

GetStringValue

При помощи метода GetStringValue мы можем получить значение записи реестра типа REG_SZ.
PowerShell:
$srp.GetStringValue(defKey,subKeyName,valueName)
6.jpg


При вызове метода, нам нужно будет указать три параметра: числовое значение раздела реестра (defKey), строковое значение пути (subKeyName), по которому находится искомая запись и строковое же значение имени требуемой записи (valueName).

Метод возвращает объект, содержащий свойства ReturnValue, числовое значение которого указывает на успешность выполнения метода, и sValue, содержащее строковое значение запрашиваемой записи.

7.jpg

SetStringValue

Метод устанавливает новое значение существующей записи строкового типа. В случае отсутствия записи с данным именем, метод создает ее и присваивает указанное значение. Если же запись существует, но ее тип отличается от REG_SZ, метод переопределяет ее как запись строкового типа и присваивает указанное значение.
PowerShell:
$srp.SetStringValue(defKey,subKeyName,valueName,value)
8.jpg


Метод принимает четыре параметра: числовое значение раздела реестра (defKey), строковое значение пути (subKeyName), строковое значение имени требуемой записи (valueName), а также строку (либо переменную, содержащую строку), которая будет являться значением указанной записи.

Метод возвращает объект, содержащий свойство ReturnValue, указывающее успешность выполнения метода.

9.jpg

GetMultiStringValue

Метод получает значение записи реестра типа REG_MULTI_SZ.
PowerShell:
$srp.GetMultiStringValue(defKey,subKeyName,valueName)
10.jpg


Принимает три параметра: числовое значение раздела реестра (defKey), строковое значение пути (subKeyName), по которому находится искомая запись и строковое же значение имени требуемой записи (valueName).

Возвращает объект, содержащий свойства ReturnValue, числовое значение которого указывает на успешность выполнения метода, и sValue, содержащее значение запрашиваемой записи.

Свойство sValueпредставляет собой массив строк, каждый элемент которого представляет собой одну из строк мультистрокового значения записи реестра.

11.jpg

SetMultiStringValue

Метод устанавливает новое значение существующей записи типа REG_MULTI_SZ. В случае отсутствия записи с данным именем, метод создает ее и присваивает указанное значение. Если же запись существует, но ее тип отличается от REG_MULTI_SZ, метод переопределяет ее как запись типа REG_MULTI_SZ и присваивает указанное значение.
PowerShell:
$srp.SetMultiStringValue(defKey,subKeyName,valueName,value)
12.jpg


Метод принимает четыре параметра: числовое значение раздела реестра (defKey), строковое значение пути (subKeyName), строковое значение имени требуемой записи (valueName), а также массив строк (либо переменную, содержащую этот массив) которые будут являться значением указанной записи.

Метод возвращает объект, содержащий свойство ReturnValue, указывающее успешность выполнения метода.

13.jpg
 
Последнее редактирование:

Dragokas

Very kind Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
5,434
Симпатии
5,293
#3
GetExpandedStringValue

Метод получает значение записи реестра типа REG_EXPAND_SZ.
PowerShell:
$srp.GetExpandedStringValue(defKey,subKeyName,valueName)
1.jpg


Принимает три параметра: числовое значение раздела реестра (defKey), строковое значение пути (subKeyName), по которому находится искомая запись и строковое же значение имени требуемой записи (valueName).

Метод возвращает объект, содержащий свойства ReturnValue, числовое значение которого указывает на успешность выполнения метода, и sValue, содержащее строковое значение запрашиваемой записи.

2.jpg

SetExpandedStringValue

Метод устанавливает новое значение существующей записи типа REG_EXPAND_SZ. В случае отсутствия записи с данным именем, метод создает ее и присваивает указанное значение. Если же запись существует, но ее тип отличается от REG_EXPAND_SZ, метод переопределяет ее как запись данного типа и присваивает указанное значение.
PowerShell:
$srp.SetExpandedStringValue(defKey,subKeyName,valueName,value)
3.jpg


Метод принимает четыре параметра: числовое значение раздела реестра (defKey), строковое значение пути (subKeyName), строковое значение имени требуемой записи (valueName), а также строку (либо переменную, содержащую строку), которая будет являться значением указанной записи.

Метод возвращает объект, содержащий свойство ReturnValue, указывающее успешность выполнения метода.

4.jpg

GetDWORDValue

Метод получает значение записи реестра типа REG_DWORD.
PowerShell:
$srp.GetDWORDValue(defKey,subKeyName,valueName)
5.jpg


Принимает три параметра: числовое значение раздела реестра (defKey), строковое значение пути (subKeyName), по которому находится искомая запись и строковое же значение имени требуемой записи (valueName).

Метод возвращает объект, содержащий свойства ReturnValue, числовое значение которого указывает на успешность выполнения метода, и uValue, содержащее значение запрашиваемой записи.

Значение свойства uValue представляет из себя целое число типа Int32.

6.jpg

SetDWORDValue

Метод устанавливает новое значение существующей записи типа REG_DWORD. В случае отсутствия записи с данным именем, метод создает ее и присваивает указанное значение. Если же запись существует, но ее тип отличается от REG_DWORD, метод переопределяет ее как запись типа REG_DWORD и присваивает указанное значение.
PowerShell:
$srp.SetDWORDValue(defKey,subKeyName,valueName,value)
7.jpg


Метод принимает четыре параметра: числовое значение раздела реестра (defKey), строковое значение пути (subKeyName), строковое значение имени требуемой записи (valueName), а также целое число (либо переменную, содержащую целочисленное значение типа Int32), которое будет являться значением указанной записи.

Метод возвращает объект, содержащий свойство ReturnValue, указывающее успешность выполнения метода.

8.jpg

GetQWORDValue

Метод получает значение записи реестра типа REG_QWORD.
PowerShell:
$srp.GetQWORDValue(defKey,subKeyName,valueName)
9.jpg


Принимает три параметра: числовое значение раздела реестра (defKey), строковое значение пути (subKeyName), по которому находится искомая запись и строковое же значение имени требуемой записи (valueName).

Метод возвращает объект, содержащий свойства ReturnValue, числовое значение которого указывает на успешность выполнения метода, и uValue, содержащее значение запрашиваемой записи.

Значение свойства uValue представляет из себя целое число типа Int64.

10.jpg

SetQWORDValue

Метод устанавливает новое значение существующей записи типа REG_QWORD. В случае отсутствия записи с данным именем, метод создает ее и присваивает указанное значение. Если же запись существует, но ее тип отличается от REG_QWORD, метод переопределяет ее как запись типа REG_QWORD и присваивает указанное значение.
PowerShell:
$srp.SetQWORDValue(defKey,subKeyName,valueName,value)
11.jpg


Метод принимает четыре параметра: числовое значение раздела реестра (defKey), строковое значение пути (subKeyName), строковое значение имени требуемой записи (valueName), а также целое число (либо переменную, содержащую целочисленное значение типа Int64), которое будет являться значением указанной записи.

Метод возвращает объект, содержащий свойство ReturnValue, указывающее успешность выполнения метода.

12.jpg

GetBinaryValue

Метод получает значение записи реестра типа REG_BINARY.
PowerShell:
$srp.GetBinaryValue(defKey,subKeyName,valueName)
14.jpg


Принимает три параметра: числовое значение раздела реестра (defKey), строковое значение пути (subKeyName), по которому находится искомая запись и строковое же значение имени требуемой записи (valueName).

Метод возвращает объект, содержащий свойства ReturnValue, числовое значение которого указывает на успешность выполнения метода, и uValue, содержащее значение запрашиваемой записи.

Значение свойства uValue представляет из массив, состоящий из элеметов типа byte.

15.jpg

SetBinaryValue

Метод устанавливает новое значение существующей записи типа REG_BINARY. В случае отсутствия записи с данным именем, метод создает ее и присваивает указанное значение. Если же запись существует, но ее тип отличается от REG_BINARY, метод переопределяет ее как запись типа REG_BINARY и присваивает указанное значение.
PowerShell:
$srp.SetBinaryValue(defKey,subKeyName,valueName,value)
16.jpg


Метод принимает четыре параметра: числовое значение раздела реестра (defKey), строковое значение пути (subKeyName), строковое значение имени требуемой записи (valueName), а также массив элементов типа byte (либо переменную, его содержащую), которые будут являться значением указанной записи.

Метод возвращает объект, содержащий свойство ReturnValue, указывающее успешность выполнения метода.

17.jpg

Exit
Windows Management Instrumentation значительным образом дополняет набор средств, находящихся в распоряжении администратора и позволяет ему автоматизировать выполнение задач, автоматизация которых обычными средствами представляет собой нетривиальную задачу, либо невозможна в принципе.

В данной статье было рассмотрено использование класса WMI StdRegProv и были приведены примеры использования его методов для работы с ключами и записями реестра операционной системы Windows.
 
Последнее редактирование:

Dragokas

Very kind Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
5,434
Симпатии
5,293
#4
Еще одна шпаргалка: StdRegProv, ROOT\CIMV2