about_Registry_Provider
Имя поставщика
Реестр
Диски
HKLM:
, HKCU:
Возможности
ShouldProcess, UseTransactions
Краткое описание
Предоставляет доступ к разделам реестра, записям и значениям в PowerShell.
Подробное описание
Эти сведения относятся только к PowerShell, работающей в Windows.
Поставщик реестра PowerShell позволяет получать, добавлять, изменять, очищать и удалять разделы, записи и значения реестра в PowerShell.
Диски реестра — это иерархическое пространство имен, содержащее разделы реестра и подразделы на компьютере. Записи и значения реестра не являются компонентами этой иерархии. Но они являются свойствами каждого из разделов.
Поставщик реестра поддерживает следующие командлеты, которые рассматриваются в этой статье.
- Get-Location
- Set-Location
- Get-Item
- Get-ChildItem
- Invoke-Item
- Move-Item
- New-Item
- Remove-Item
- Clear-ItemProperty
- Get-ItemProperty
- New-ItemProperty
- Remove-ItemProperty
- Set-ItemProperty
- Get-Acl
- Set-Acl
Типы, предоставляемые этим поставщиком
Разделы реестра представлены в виде экземпляров класса 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-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: