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

Тема в разделе "Пакетные файлы CMD, BAT", создана пользователем Dragokas, 5 мар 2016.

  1. Dragokas
    Оффлайн

    Dragokas Very kind Developer Команда форума Супер-Модератор Разработчик Клуб переводчиков

    Сообщения:
    4.471
    Симпатии:
    4.303
    Автор: Сергей Васин

    Внесение изменений в реестр компьютера – довольно часто встречающаяся в работе администратора задача. В случае, если компьютеров немного и это разовое изменение, это можно сделать через редактор реестра, подключившись к реестру удаленного компьютера. Если же изменение требуется внести на ощутимое число компьютеров или если изменения должны вноситься в определенное время либо при определенном событии, то в этом случае на помощь может прийти 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’, которое в большинстве случаев является пространством имен по умолчанию.

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

    Эти значения приведены в таблице:
    Название раздела Шестнадцатеричное значение Десятичное значение
    1 HKEY_CLASSES_ROOT 0x80000000 2147483648
    2 HKEY_CURRENT_USER 0x80000001 2147483649
    3 HKEY_LOCAL_MACHINE 0x80000002 2147483650
    4 HKEY_USERS 0x80000003 2147483651
    5 HKEY_CURRENT_CONFIG 0x80000005 2147483653
    6 HKEY_DYN_DATA (Windows 9x) 0x80000006 2147483655


    Стоит отметить, что на удаленных компьютерах вы не сможете использовать раздел 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 – это массив числовых значений, соответствующих типам записей реестра.

    Список типов записей реестра и соответствующих им числовых значений.
    Тип записи Обозначение типа записи Числовое значение
    1 String REG_SZ 1
    2 Expandable String REG_EXPAND_SZ 2
    3 Binary REG_BINARY 3
    4 DWORD REG_DWORD 4
    5 Multi-String REG_MULTI_SZ 7
    6 QWORD REG_QWORD 11


    То есть, если свойство 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
     
    Последнее редактирование: 5 мар 2016
    Kиpилл нравится это.
  2. Dragokas
    Оффлайн

    Dragokas Very kind Developer Команда форума Супер-Модератор Разработчик Клуб переводчиков

    Сообщения:
    4.471
    Симпатии:
    4.303
    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
     
    Последнее редактирование: 5 мар 2016
  3. Dragokas
    Оффлайн

    Dragokas Very kind Developer Команда форума Супер-Модератор Разработчик Клуб переводчиков

    Сообщения:
    4.471
    Симпатии:
    4.303
    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.
     
    Последнее редактирование: 5 мар 2016
  4. Dragokas
    Оффлайн

    Dragokas Very kind Developer Команда форума Супер-Модератор Разработчик Клуб переводчиков

    Сообщения:
    4.471
    Симпатии:
    4.303

Поделиться этой страницей