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

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

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

  1. Dragokas
    Оффлайн

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

    Сообщения:
    4.941
    Симпатии:
    4.819
    Баллы:
    338
    Автор: Сергей Васин

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

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

    Код (PowerShell):
    $srp = [wmiclass]"\\computername\root\default:StdRegProv"

    1.

    либо
    Код (PowerShell):

    $srp = Get-WMIObject –Namespace 'root\default' –list –ComputerName 'computername' |
    Where-Object {$_.name –eq 'StdRegProv'}
     
    2.

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

    3.

    Хотя в более ранних операционных системах (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.


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



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

    EnumKey
    Код (PowerShell):

    $srp.EnumKey(defKey,subKeyName)
     
    5.

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

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

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

    6.

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

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

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

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

    7.

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

    8.

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

    9.

    EnumValues
    Код (PowerShell):

    $srp.EnumValues(defKey,subKeyName)
     
    10.


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

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

    11.

    Метод возвращает объект содержащий три свойства (кроме системных): 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.

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

    13.

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

    14.

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

    15.

    CreateKey

    Этот метод позволяет создать ключ или иерархию ключей в реестре
    Код (PowerShell):

    $srp.CreateKey(defKey,subKeyName)
     
    16.


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

    Например, чтобы создать ключ ‘Vendor’ под ключом ‘Software’ в разделе HKEY_LOCAL_MACHINE, команда должна выглядеть так:
    Код (PowerShell):

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

    $srp.CreateKey($hklm,"Software\Vendor\Product")
     
    17.


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

    18.
     
    Последнее редактирование: 5 мар 2016
    Kиpилл нравится это.
  2. Dragokas
    Оффлайн

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

    Сообщения:
    4.941
    Симпатии:
    4.819
    Баллы:
    338
    DeleteKey

    Этот метод удаляет определенный ключ в указанном разделе реестра.
    Код (PowerShell):

    $srp.DeleteKey(degKey,subKeyName)
     
    1.


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

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

    Например, мы вызываем метод DeleteKey со следующими параметрами:
    Код (PowerShell):

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

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

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

    2.

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

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

    3.

    DeleteValue

    Метод позволяет удалить определенную запись реестра, находящуюся в указанном ключе.
    Код (PowerShell):

    $srp.DeleteValue(defKey,subKeyName,deleteValue)
     
    4.


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

    При вызове метода со следующими параметрами:
    Код (PowerShell):

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

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

    5.

    GetStringValue

    При помощи метода GetStringValue мы можем получить значение записи реестра типа REG_SZ.
    Код (PowerShell):

    $srp.GetStringValue(defKey,subKeyName,valueName)
     
    6.


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

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

    7.

    SetStringValue

    Метод устанавливает новое значение существующей записи строкового типа. В случае отсутствия записи с данным именем, метод создает ее и присваивает указанное значение. Если же запись существует, но ее тип отличается от REG_SZ, метод переопределяет ее как запись строкового типа и присваивает указанное значение.
    Код (PowerShell):

    $srp.SetStringValue(defKey,subKeyName,valueName,value)
     
    8.


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

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

    9.

    GetMultiStringValue

    Метод получает значение записи реестра типа REG_MULTI_SZ.
    Код (PowerShell):

    $srp.GetMultiStringValue(defKey,subKeyName,valueName)
     
    10.


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

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

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

    11.

    SetMultiStringValue

    Метод устанавливает новое значение существующей записи типа REG_MULTI_SZ. В случае отсутствия записи с данным именем, метод создает ее и присваивает указанное значение. Если же запись существует, но ее тип отличается от REG_MULTI_SZ, метод переопределяет ее как запись типа REG_MULTI_SZ и присваивает указанное значение.
    Код (PowerShell):

    $srp.SetMultiStringValue(defKey,subKeyName,valueName,value)
     
    12.


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

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

    13.
     
    Последнее редактирование: 5 мар 2016
  3. Dragokas
    Оффлайн

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

    Сообщения:
    4.941
    Симпатии:
    4.819
    Баллы:
    338
    GetExpandedStringValue

    Метод получает значение записи реестра типа REG_EXPAND_SZ.
    Код (PowerShell):

    $srp.GetExpandedStringValue(defKey,subKeyName,valueName)
     
    1.


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

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

    2.

    SetExpandedStringValue

    Метод устанавливает новое значение существующей записи типа REG_EXPAND_SZ. В случае отсутствия записи с данным именем, метод создает ее и присваивает указанное значение. Если же запись существует, но ее тип отличается от REG_EXPAND_SZ, метод переопределяет ее как запись данного типа и присваивает указанное значение.
    Код (PowerShell):

    $srp.SetExpandedStringValue(defKey,subKeyName,valueName,value)
     
    3.


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

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

    4.

    GetDWORDValue

    Метод получает значение записи реестра типа REG_DWORD.
    Код (PowerShell):

    $srp.GetDWORDValue(defKey,subKeyName,valueName)
     
    5.


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

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

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

    6.

    SetDWORDValue

    Метод устанавливает новое значение существующей записи типа REG_DWORD. В случае отсутствия записи с данным именем, метод создает ее и присваивает указанное значение. Если же запись существует, но ее тип отличается от REG_DWORD, метод переопределяет ее как запись типа REG_DWORD и присваивает указанное значение.
    Код (PowerShell):

    $srp.SetDWORDValue(defKey,subKeyName,valueName,value)
     
    7.


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

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

    8.

    GetQWORDValue

    Метод получает значение записи реестра типа REG_QWORD.
    Код (PowerShell):

    $srp.GetQWORDValue(defKey,subKeyName,valueName)
     
    9.


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

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

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

    10.

    SetQWORDValue

    Метод устанавливает новое значение существующей записи типа REG_QWORD. В случае отсутствия записи с данным именем, метод создает ее и присваивает указанное значение. Если же запись существует, но ее тип отличается от REG_QWORD, метод переопределяет ее как запись типа REG_QWORD и присваивает указанное значение.
    Код (PowerShell):

    $srp.SetQWORDValue(defKey,subKeyName,valueName,value)
     
    11.


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

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

    12.

    GetBinaryValue

    Метод получает значение записи реестра типа REG_BINARY.
    Код (PowerShell):

    $srp.GetBinaryValue(defKey,subKeyName,valueName)
     
    14.


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

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

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

    15.

    SetBinaryValue

    Метод устанавливает новое значение существующей записи типа REG_BINARY. В случае отсутствия записи с данным именем, метод создает ее и присваивает указанное значение. Если же запись существует, но ее тип отличается от REG_BINARY, метод переопределяет ее как запись типа REG_BINARY и присваивает указанное значение.
    Код (PowerShell):

    $srp.SetBinaryValue(defKey,subKeyName,valueName,value)
     
    16.


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

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

    17.

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

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

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

    Сообщения:
    4.941
    Симпатии:
    4.819
    Баллы:
    338

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