Работа с разделами реестра
Этот пример применяется только к платформам Windows.
Так как разделы реестра представляют собой элементы на дисках PowerShell, работа с ними очень похожа на работу с файлами и папками. Одно важное различие заключается в том, что каждый элемент реестрового диска PowerShell представляет собой контейнер, как и папка на диске файловой системы. Однако записи реестра и связанные с ними значения являются свойствами элементов, а не отдельными элементами.
Перечисление всех подразделов раздела реестра
Все элементы можно отобразить непосредственно в разделе реестра с помощью Get-ChildItem
. Для отображения скрытых и системных элементов добавьте необязательный параметр Force. Например, эта команда отображает элементы, непосредственно расположенные на диске HKCU:
PowerShell, который соответствует кусту реестра HKEY_CURRENT_USER
:
Get-ChildItem -Path HKCU:\ | Select-Object Name
Hive: Microsoft.PowerShell.Core\Registry::HKEY_CURRENT_USER
Name
----
HKEY_CURRENT_USER\AppEvents
HKEY_CURRENT_USER\Console
HKEY_CURRENT_USER\Control Panel
HKEY_CURRENT_USER\DirectShow
HKEY_CURRENT_USER\dummy
HKEY_CURRENT_USER\Environment
HKEY_CURRENT_USER\EUDC
HKEY_CURRENT_USER\Keyboard Layout
HKEY_CURRENT_USER\MediaFoundation
HKEY_CURRENT_USER\Microsoft
HKEY_CURRENT_USER\Network
HKEY_CURRENT_USER\Printers
HKEY_CURRENT_USER\Software
HKEY_CURRENT_USER\System
HKEY_CURRENT_USER\Uninstall
HKEY_CURRENT_USER\WXP
HKEY_CURRENT_USER\Volatile Environment
Это разделы верхнего уровня, отображаемые в разделе HKEY_CURRENT_USER
в редакторе реестра (regedit.exe
).
Указать этот путь в реестре можно также, задав имя поставщика реестра с последующей строкой ::
. Полное имя поставщика реестра имеет вид Microsoft.PowerShell.Core\Registry
, но может быть сокращено до Registry
. Любая из следующих команд выводит содержимое элементов, непосредственно расположенных внутри HKCU:
.
Get-ChildItem -Path Registry::HKEY_CURRENT_USER
Get-ChildItem -Path Microsoft.PowerShell.Core\Registry::HKEY_CURRENT_USER
Get-ChildItem -Path Registry::HKCU
Get-ChildItem -Path Microsoft.PowerShell.Core\Registry::HKCU
Get-ChildItem HKCU:
Эти команды перечисляют только непосредственно содержащиеся элементы, как использование DIR
в cmd.exe
оболочке UNIX или ls
в ней. Для показа вложенных элементов необходимо указать параметр Recurse. Для вывода всех разделов реестра в HKCU:
используется приведенная ниже команда.
Get-ChildItem -Path HKCU:\ -Recurse
Командлет Get-ChildItem
позволяет выполнять сложные операции фильтрации с помощью параметров Path, Filter, Include и Exclude, но обычно осуществляется лишь фильтрация по имени. Вы можете выполнять сложную фильтрацию на основе других свойств элементов с помощью командлета Where-Object
.
Следующая команда находит все разделы в HKCU:\Software
, у которых не более одного подраздела и ровно четыре значения:
Get-ChildItem -Path HKCU:\Software -Recurse |
Where-Object {($_.SubKeyCount -le 1) -and ($_.ValueCount -eq 4) }
Копирование ключей
Копирование выполняется с помощью командлета Copy-Item
. Следующая команда копирует подраздел CurrentVersion
из HKLM:\SOFTWARE\Microsoft\Windows\
и все его свойства в HKCU:\
.
Copy-Item -Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion' -Destination HKCU:
Если вы изучите этот новый раздел в редакторе реестра или используете Get-ChildItem
, обратите внимание, что в новом расположении нет копий содержащихся вложенных ключей. Чтобы скопировать все содержимое контейнера, необходимо указать параметр Recurse. Копирование в предыдущем примере можно сделать рекурсивным, если использовать следующую команду:
Copy-Item -Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion' -Destination HKCU: -Recurse
Для копирования файловой системы можно использовать и другие доступные средства. Любые средства редактирования реестра, включая , и COM-объекты, поддерживающие редактирование реестра, такие как reg.exe
regedit.exe
regini.exe
WScript.Shell и класс StdRegProv WMI, можно использовать из PowerShell.
Создание ключей
Создание новых разделов в реестре проще, чем создание нового элемента в файловой системе. Так как все разделы реестра являются контейнерами, вам не нужно указывать тип элемента. Просто укажите явный путь, например:
New-Item -Path HKCU:\Software_DeleteMe
Для указания раздела можно также использовать путь на основе имени поставщика:
New-Item -Path Registry::HKCU\Software_DeleteMe
Удаление ключей
Удаление элементов в принципе осуществляется одинаково для всех поставщиков. Следующие команды автоматически удаляют элементы:
Remove-Item -Path HKCU:\Software_DeleteMe
Remove-Item -Path 'HKCU:\key with spaces in the name'
Удаление всех ключей под определенным ключом
Удалить вложенные элементы можно с помощью командлета Remove-Item
, однако он потребует подтверждения удаления, если элемент сам что-нибудь содержит. Например, при попытке удаления созданного нами подраздела HKCU:\CurrentVersion
будет отображено следующее:
Remove-Item -Path HKCU:\CurrentVersion
Confirm
The item at HKCU:\CurrentVersion\AdminDebug 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 HKCU:\CurrentVersion -Recurse
Если нужно удалить все элементы в HKCU:\CurrentVersion
, но не сам раздел HKCU:\CurrentVersion
, вместо этого введите следующее:
Remove-Item -Path HKCU:\CurrentVersion\* -Recurse
PowerShell