Поделиться через


about_Registry_Provider

Имя поставщика

Реестр

Диски

HKLM:, HKCU:

Возможности

ShouldProcess, UseTransactions

Краткое описание

Предоставляет доступ к разделам реестра, записям и значениям в PowerShell.

Подробное описание

Эти сведения относятся только к PowerShell, работающей в Windows.

Поставщик реестра PowerShell позволяет получать, добавлять, изменять, очищать и удалять разделы, записи и значения реестра в PowerShell.

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

Поставщик реестра поддерживает следующие командлеты, которые рассматриваются в этой статье.

Типы, предоставляемые этим поставщиком

Разделы реестра представлены в виде экземпляров класса Microsoft.Win32.RegistryKey . Записи реестра представлены в виде экземпляров класса PSCustomObject .

Поставщик реестра предоставляет хранилище данных в виде двух дисков по умолчанию. Расположение реестра HKEY_LOCAL_MACHINE сопоставляется с диском HKLM: , а HKEY_CURRENT_USER сопоставляется с диском HKCU: . Для работы с реестром можно изменить расположение диска HKLM: с помощью следующей команды.

Set-Location HKLM:

Чтобы вернуться к диску файловой системы, введите имя диска. Например, введите:

Set-Location C:

Вы также можете работать с поставщиком реестра с любого другого диска PowerShell. Чтобы сослаться на раздел реестра из другого расположения, используйте имя диска (HKLM:, HKCU:) в пути. Используйте обратную косую черту (\) или косую черту (/), чтобы указать уровень диска реестра .

PS C:\> cd HKLM:\Software

Примечание

PowerShell использует псевдонимы, чтобы обеспечить привычный способ работы с путями поставщика. Такие команды, как dir и ls , теперь являются псевдонимами для Get-ChildItem, cd являются псевдонимом для Set-Location и pwd псевдонимом get-Location.

В последнем примере показан другой синтаксис пути, который можно использовать для навигации по поставщику реестра . В этом синтаксисе используется имя поставщика, за которым следует две двоеточия ::. Этот синтаксис позволяет использовать полное имя HIVE вместо сопоставленного имени HKLMдиска .

cd "Registry::HKEY_LOCAL_MACHINE\Software"

Отображение содержимого разделов реестра

Реестр делится на разделы, подразделы и записи. Дополнительные сведения о структуре реестра см. в разделе Структура реестра.

На диске реестра каждый раздел является контейнером. Ключ может содержать любое количество ключей. Раздел реестра с родительским ключом называется подразделом. Вы можете использовать для Get-ChildItem просмотра разделов реестра и Set-Location перехода по пути к разделу.

Значения реестра — это атрибуты раздела реестра. На диске реестра они называются свойствами элементов. Раздел реестра может иметь как дочерние ключи, так и свойства элемента.

В этом примере показано различие между Get-Item и Get-ChildItem . При использовании Get-Item в разделе реестра Spooler можно просмотреть его свойства.

Get-Item -Path HKLM:\SYSTEM\CurrentControlSet\Services\Spooler
    Hive: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services


Name        Property
----        --------
Spooler     DependOnService    : {RPCSS, http}
            Description        : @%systemroot%\system32\spoolsv.exe,-2
            DisplayName        : @%systemroot%\system32\spoolsv.exe,-1
            ErrorControl       : 1
            FailureActions     : {16, 14, 0, 0...}
            Group              : SpoolerGroup
            ImagePath          : C:\WINDOWS\System32\spoolsv.exe
            ObjectName         : LocalSystem
            RequiredPrivileges : {SeTcbPrivilege, SeImpersonatePrivilege, ...
            ServiceSidType     : 1
            Start              : 2
            Type               : 27

Каждый раздел реестра также может содержать подразделы. При использовании Get-Item в разделе реестра подразделы не отображаются. Командлет Get-ChildItem отобразит дочерние элементы ключа Очереди, включая свойства каждого подраздела. Свойства родительских ключей не отображаются при использовании Get-ChildItem.

Get-ChildItem -Path HKLM:\SYSTEM\CurrentControlSet\Services\Spooler
    Hive: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Spooler


Name             Property
----             --------
Performance      Close           : PerfClose
                 Collect         : PerfCollect
                 Collect Timeout : 2000
                 Library         : C:\Windows\System32\winspool.drv
                 Object List     : 1450
                 Open            : PerfOpen
                 Open Timeout    : 4000
Security         Security : {1, 0, 20, 128...}

Командлет Get-Item также можно использовать в текущем расположении. В следующем примере показано, как перейти к разделу реестра "Spooler" и получить свойства элемента. Точка . используется для указания текущего расположения.

cd HKLM:\System\CurrentControlSet\Services\Spooler
Get-Item .
    Hive: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services

Name             Property
----             --------
Spooler          DependOnService    : {RPCSS, http}
                 Description        : @%systemroot%\system32\spoolsv.exe,-2
...

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

-Get-Item -Get-ChildItem

Просмотр значений раздела реестра

Значения раздела реестра хранятся как свойства каждого раздела реестра. Командлет Get-ItemProperty просматривает свойства раздела реестра, используя указанное имя. Результатом будет PSCustomObject , содержащий указанные свойства.

В следующем примере командлет используется Get-ItemProperty для просмотра всех свойств. Хранение результирующего объекта в переменной позволяет получить доступ к нужному значению свойства.

$p = Get-ItemProperty -Path HKLM:\SYSTEM\CurrentControlSet\Services\Spooler
$p.DependOnService
RPCSS
http

При указании -Name значения параметра выбираются указанные свойства и возвращается psCustomObject. В следующем примере показана разница в выходных данных при использовании -Name параметра .

Get-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Wbem
BUILD                      : 17134.1
Installation Directory     : C:\WINDOWS\system32\WBEM
MOF Self-Install Directory : C:\WINDOWS\system32\WBEM\MOF
PSPath                     : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Wbem
PSParentPath               : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft
PSChildName                : Wbem
PSDrive                    : HKLM
PSProvider                 : Microsoft.PowerShell.Core\Registry
Get-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Wbem -Name BUILD
BUILD        : 17134.1
PSPath       : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Wbem
PSParentPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft
PSChildName  : Wbem
PSDrive      : HKLM
PSProvider   : Microsoft.PowerShell.Core\Registry

Начиная с PowerShell 5.0 командлет Get-ItemPropertyValue возвращает только значение указанного свойства.

Get-ItemPropertyValue -Path HKLM:\SOFTWARE\Microsoft\Wbem -Name BUILD
17134.1

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

Изменение значений раздела реестра

Командлет Set-ItemProperty задаст атрибуты для разделов реестра. В следующем примере используется для Set-ItemProperty изменения типа запуска службы очереди очереди на ручной. В этом примере параметр StartType вернется на Автоматический с помощью командлета Set-Service .

Get-Service spooler | Select-Object Name, StartMode
Name    StartType
----    ---------
spooler Automatic
$path = "HKLM:\SYSTEM\CurrentControlSet\Services\Spooler\"
Set-ItemProperty -Path $path -Name Start -Value 3
Get-Service spooler | Select-Object Name, StartMode
Name    StartType
----    ---------
spooler    Manual
Set-Service -Name Spooler -StartupType Automatic

Каждый раздел реестра имеет значение по умолчанию . Значение по умолчанию для раздела реестра можно изменить с помощью Set-Item или Set-ItemProperty.

Set-ItemProperty -Path HKLM:\SOFTWARE\Contoso -Name "(default)" -Value "one"
Set-Item -Path HKLM:\SOFTWARE\Contoso -Value "two"

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

Создание разделов и значений реестра

Командлет New-Item создаст разделы реестра с указанным именем. Можно также использовать функцию mkdir , которая вызывает New-Item командлет внутри системы.

mkdir ContosoCompany
    Hive: HKEY_LOCAL_MACHINE\SOFTWARE

Name                           Property
----                           --------
ContosoCompany

Командлет можно использовать для New-ItemProperty создания значений в заданном разделе реестра. В следующем примере создается новое значение DWORD в разделе реестра ContosoCompany.

$path = "HKLM:\SOFTWARE\ContosoCompany"
New-ItemProperty -Path $path -Name Test -Type DWORD -Value 1

Примечание

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

Подробные сведения об использовании командлетов см. в разделе New-ItemProperty.

Копирование разделов и значений реестра

В поставщике реестра используйте Copy-Item командлет для копирования разделов и значений реестра. Copy-ItemProperty Используйте командлет только для копирования значений реестра. Следующая команда копирует раздел реестра Contoso и его свойства в указанное расположение HKLM:\Software\Fabrikam.

Copy-Item создает ключ назначения, если он не существует. Если ключ назначения существует, Copy-Item создает дубликат исходного ключа в качестве дочернего элемента (подраздела) ключа назначения.

Copy-Item -Path  HKLM:\Software\Contoso -Destination HKLM:\Software\Fabrikam

Следующая команда использует Copy-ItemProperty командлет для копирования значения "Server" из ключа Contoso в ключ Fabrikam.

$source = "HKLM:\SOFTWARE\Contoso"
$dest = "HKLM:\SOFTWARE\Fabrikam"
Copy-ItemProperty -Path $source -Destination $dest -Name Server

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

Перемещение разделов и значений реестра

Командлеты Move-Item и Move-ItemProperty ведут себя так же, как их аналоги "Copy". Если назначение существует, Move-Item перемещает исходный ключ под ключ назначения. Если ключ назначения не существует, исходный ключ перемещается в путь назначения.

Следующая команда перемещает ключ Contoso в путь HKLM:\SOFTWARE\Fabrikam.

Move-Item -Path HKLM:\SOFTWARE\Contoso -Destination HKLM:\SOFTWARE\Fabrikam

Эта команда перемещает все свойства из HKLM:\SOFTWARE\ContosoCompany в HKLM:\SOFTWARE\Fabrikam.

$source = "HKLM:\SOFTWARE\Contoso"
$dest = "HKLM:\SOFTWARE\Fabrikam"
Move-ItemProperty -Path $source -Destination $dest -Name *

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

Переименование разделов и значений реестра

Разделы и значения реестра можно переименовать так же, как файлы и папки. Rename-Item переименовывает разделы реестра, а Rename-ItemProperty — значения реестра.

$path = "HKLM:\SOFTWARE\Contoso"
Rename-ItemProperty -Path $path -Name ContosoTest -NewName FabrikamTest
Rename-Item -Path $path -NewName Fabrikam

Изменение дескрипторов безопасности

Вы можете ограничить доступ к разделам Get-Acl реестра с помощью командлетов и Set-Acl . В следующем примере в раздел реестра добавляется новый пользователь с полным доступом HKLM:\SOFTWARE\Contoso .

$acl = Get-Acl -Path HKLM:\SOFTWARE\Contoso
$rule = New-Object System.Security.AccessControl.RegistryAccessRule `
("CONTOSO\jsmith", "FullControl", "Allow")
$acl.SetAccessRule($rule)
$acl | Set-Acl -Path HKLM:\SOFTWARE\Contoso

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

Удаление и очистка разделов и значений реестра

Удалить вложенные элементы можно с помощью командлета Remove-Item, однако он потребует подтверждения удаления, если элемент сам что-нибудь содержит. В следующем примере предпринимается попытка удалить ключ HKLM:\SOFTWARE\Contoso.

dir HKLM:\SOFTWARE\Contoso\
    Hive: HKEY_LOCAL_MACHINE\SOFTWARE\Contoso

Name                           Property
----                           --------
ChildKey
Remove-Item -Path HKLM:\SOFTWARE\Contoso
Confirm
The item at HKLM:\SOFTWARE\Contoso has children and the -Recurse
parameter was not specified. If you continue, all children will be removed
with the item. Are you sure you want to continue?
[Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help
(default is "Y"):

Чтобы удалить содержащиеся элементы без запроса, укажите -Recurse параметр .

Remove-Item -Path HKLM:\SOFTWARE\Contoso -Recurse

Если вы хотите удалить все элементы внутри HKLM:\SOFTWARE\Contoso , но не HKLM:\SOFTWARE\Contoso сами по себе, используйте обратную косую черту \ в конце, за которой следует подстановочный знак.

Remove-Item -Path HKLM:\SOFTWARE\Contoso\* -Recurse

Эта команда удаляет значение реестра ContosoTest из HKLM:\SOFTWARE\Contoso раздела реестра.

Remove-ItemProperty -Path HKLM:\SOFTWARE\Contoso -Name ContosoTest

Clear-Item очищает все значения реестра для раздела. В следующем примере показано удаление всех значений HKLM:\SOFTWARE\Contoso из раздела реестра. Чтобы очистить только определенное свойство, используйте .Clear-ItemProperty

Get-Item .\Contoso\
    Hive: HKEY_LOCAL_MACHINE\SOFTWARE

Name           Property
----           --------
Contoso        Server     : {a, b, c}
               HereString : {This is text which contains
               newlines. It also contains "quoted" strings}
               (default)  : 1
Clear-Item .\Contoso\
Get-Item .\Contoso\
    Hive: HKEY_LOCAL_MACHINE\SOFTWARE

Name                           Property
----                           --------
Contoso

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

Динамические параметры

Динамические параметры — это параметры командлета, которые добавляются поставщиком PowerShell и доступны только при использовании командлета на диске с поддержкой поставщика.

Введите <Microsoft.Win32.RegistryValueKind>

Задает или изменяет тип данных значения реестра. Значение по умолчанию — String (REG_SZ).

Этот параметр функционирует соответствующим образом для командлета Set-ItemProperty. Этот параметр также доступен для использования с командлетом Set-Item на дисках реестра, но он не оказывает никакого влияния.

Значение Описание
String Определяет строку, заканчивающуюся символом NULL. Используется для REG_SZ значений.
ExpandString Указывает строку, завершающуюся нулевым значением, которая содержит нерасширенные
ссылки на переменные среды, которые развертываются, когда
значение извлекается. Используется для REG_EXPAND_SZ значений.
Binary Определяет двоичные данные в любой форме. Используется для REG_BINARY значений.
DWord Определяет 32-разрядное двоичное число. Используется для REG_DWORD значений.
MultiString Указывает массив строк, завершаемых нулевым значением.
два символа NULL. Используется для REG_MULTI_SZ значений.
QWord Задает 64-разрядное двоичное число. Используется для REG_QWORD значений.
Unknown Указывает неподдерживаемый тип данных реестра, например
REG_RESOURCE_LIST значений.

Поддерживаемые командлеты

Использование конвейера

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

Получение справки

Начиная с Windows PowerShell 3.0, стали доступны настраиваемые разделы справки по командлетам поставщика, в которых объясняется поведение этих командлетов на диске файловой системы.

Чтобы получить разделы справки, настроенные для диска файловой системы, выполните Get-Help команду на диске файловой системы или используйте параметр Path , чтобы указать диск файловой системы.

Get-Help Get-ChildItem
Get-Help Get-ChildItem -Path HKLM:

См. также раздел