
Редактор реестра (regedit.exe
) и reg.exe
Утилиты командной строки — не единственные инструменты для доступа к реестру и управления им в Windows. PowerShell предоставляет администратору большое количество инструментов для взаимодействия с реестром. С помощью PowerShell можно создавать, изменять или удалять ключ/параметры реестра, искать значение и подключаться к реестру на удаленном компьютере.
- Навигация по реестру Windows как по файловой системе с помощью PowerShell
- Получение значения параметра реестра с помощью PowerShell
- Изменение значения реестра с помощью PowerShell
- Как создать новый ключ или параметр реестра с помощью PowerShell?
- Удаление ключа или параметра реестра
- Как переименовать ключ реестра или параметр?
- Поиск в реестре по ключевому слову с помощью PowerShell
- Установка разрешений для ключей реестра с помощью PowerShell
- Получение значения реестра с удаленного компьютера с помощью PowerShell
Навигация по реестру Windows как по файловой системе с помощью PowerShell
Работа с реестром в PowerShell похожа на работу с обычными файлами на локальном диске. Основное отличие заключается в том, что в этой концепции ключи реестра аналогичны файлам, а параметры реестра — свойствам этих файлов.
Отображение списка доступных дисков на компьютере:
get-psdrive
Обратите внимание, что среди дисков (с назначенными буквами дисков) есть специальные устройства, доступные через Поставщик реестра — HKCU (HKEY_CURRENT_USER) и HKLM (HKEY_LOCAL_MACHINE). Вы можете перемещаться по дереву реестра так же, как по дискам. HKLM:\ и HKCU:\ используются для доступа к определенному разделу реестра.
cd HKLM:\
Dir -ErrorAction SilentlyContinue
Вы можете получить доступ к ключам реестра и их параметрам с помощью тех же команд PowerShell, которые используются для управления файлами и папками.
Чтобы обратиться к ключам реестра, используйте команды с xxx-Item:
Get-Item
— получить ключ реестраNew-Item
— создать новый ключ реестраRemove-Item
— удалить ключ реестра
Параметры реестра следует рассматривать как свойства ключа реестра (аналогично свойствам файлов/папок).[xxx-ItemProperty Команды используются для управления параметрами реестра:
Get-ItemProperty
— получить значение параметра реестраSet-ItemProperty
— изменить значение параметра реестраNew-ItemProperty
— создать параметр реестраRename-ItemProperty
— переименовать параметрRemove-ItemProperty
— удалить параметр реестра
Перейти к конкретному ключу реестра (например, к тому, который отвечает за настройки автоматического обновления драйверов) можно с помощью одной из двух команд:
cd HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\DriverSearching
или
Set-Location -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\DriverSearching
Получение значения параметра реестра с помощью PowerShell
Обратите внимание, что параметры, хранящиеся в ключе реестра, — это не вложенные объекты, а свойство конкретного ключа реестра. Любой ключ реестра может иметь любое количество параметров.
Перечислите содержимое текущего ключа реестра с помощью команды:
dir
Или
Get-ChildItem
Команда отобразила информацию о вложенных ключах реестра и их свойствах. Но не отобразила информацию о параметре SearchOrderConfig, который является свойством текущего ключа.
Используйте Get-Item команда для получения параметров ключа реестра:
Get-Item .
Или
Get-Item –Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\DriverSearching
Как видите, ключ DriverSearching имеет только один параметр — SearchOrderConfig со значением 1.
Чтобы получить значение параметра ключа реестра, используйте команду Get-ItemProperty.
$DriverUpdate = Get-ItemProperty –Path ‘HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\DriverSearching’
$DriverUpdate.SearchOrderConfig
Мы получили, что значение параметра SearchOrderConfig равно 1.
Изменение значения реестра с помощью PowerShell
Чтобы изменить значение параметра реестра SearchOrderConfig, воспользуйтесь командой Set-ItemProperty:
Set-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\DriverSearching' -Name SearchOrderConfig -Value 0
Убедитесь, что значение параметра изменилось:
Get-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\DriverSearching' -Name SearchOrderConfig
Как создать новый ключ или параметр реестра с помощью PowerShell?
Чтобы создать новый ключ реестра, используйте команду New-Item. Давайте создадим новый ключ с именем NewKey:
$HKCU_Desktop= "HKCU:\Control Panel\Desktop"
New-Item –Path $HKCU_Desktop –Name NewKey
Теперь давайте создадим новый параметр в новом ключе реестра. Предположим, нам нужно создать новый строковый параметр типа REG_SZ с именем SuperParamString и значение filetmp1.txt:
New-ItemProperty -Path $HKCU_Desktop\NewKey -Name "SuperParamString" -Value ”filetmp1.txt” -PropertyType "String"
- Строка (REG_SZ)
- ExpandString (REG_EXPAND_SZ)
- MultiString (REG_MULTI_SZ)
- Двоичный (REG_BINARY)
- DWord (REG_DWORD)
- Qword (REG_QWORD)
- Неизвестно (неподдерживаемый тип данных реестра)
Убедитесь, что новый ключ и параметр появились в реестре.
Как проверить, существует ли ключ реестра?
Если вам нужно проверить, существует ли определенный ключ реестра, воспользуйтесь функцией Test-Path команда:
Test-Path 'HKCU:\Control Panel\Desktop\NewKey'
Следующий сценарий PowerShell проверит, существует ли определенное значение реестра, и если нет, создаст его.
regkey='HKCU:\Control Panel\Desktop\NewKey'
$regparam='testparameter'
if (Get-ItemProperty -Path $regkey -Name $regparam -ErrorAction Ignore)
{ write-host 'The registry entry already exist' }
else
{ New-ItemProperty -Path $regkey -Name $regparam -Value ”woshub_test” -PropertyType "String" }
Использование Копировать элемент Команда позволяет копировать записи из одного ключа реестра в другой:
$source="HKLM:\SOFTWARE\7-zip\"
$dest="HKLM:\SOFTWARE\backup"
Copy-Item -Path $source -Destination $dest -Recurse
Если вы хотите скопировать все, включая подзаписи, добавьте параметр -Recurse переключатель.
Удаление ключа или параметра реестра
[Remove-ItemProperty Команда используется для удаления параметра в ключе реестра. Давайте удалим созданный ранее параметр SuperParamString:
$HKCU_Desktop= "HKCU:\Control Panel\Desktop"
Remove-ItemProperty –Path $HKCU_Desktop\NewKey –Name "SuperParamString"
Можно удалить весь ключ реестра со всем его содержимым:
Remove-Item –Path $HKCU_Desktop\NewKey –Recurse
Для удаления всех элементов в reg-ключе (но не самого ключа):
Remove-Item –Path $HKCU_Desktop\NewKey\* –Recurse
Как переименовать ключ реестра или параметр?
Переименовать параметр реестра можно с помощью команды:
Rename-ItemProperty –path ‘HKCU:\Control Panel\Desktop\NewKey’ –name "SuperParamString" –newname “OldParamString”
Аналогичным образом можно переименовать ключ реестра:
Rename-Item -path 'HKCU:\Control Panel\Desktop\NewKey' OldKey
Поиск в реестре по ключевому слову с помощью PowerShell
PowerShell позволяет выполнять поиск в реестре. Ниже приведен поиск в HKCU:\Control Panel\Desktop параметров, имена которых содержат *.dpi* Ключ.
$Path = (Get-ItemProperty ‘HKCU:\Control Panel\Desktop’)
$Path.PSObject.Properties | ForEach-Object {
If($_.Name -like '*dpi*'){
Write-Host $_.Name ' = ' $_.Value
}
}
Чтобы найти ключ реестра с определенным именем:
Get-ChildItem -path HKLM:\ -recurse -ErrorAction SilentlyContinue | Where-Object {$_.Name -like "*woshub*"}
Установка разрешений для ключей реестра с помощью PowerShell
Вы можете получить текущие разрешения ключа реестра с помощью команды Get-ACL команда.
$rights = Get-Acl -Path 'HKCU:\Control Panel\Desktop\NewKey'
$rights.Access.IdentityReference
В следующем примере мы изменим ACL в этом ключе реестра, чтобы предоставить доступ на запись встроенной группе Users.
Получение текущих разрешений:
$rights = Get-Acl -Path 'HKCU:\Control Panel\Desktop\NewKey'
Укажите пользователя или группу, которым вы хотите предоставить доступ:
$idRef = [System.Security.Principal.NTAccount]"BuiltIn\Users"
Выберите уровень доступа:
$regRights = [System.Security.AccessControl.RegistryRights]::WriteKey
Установка параметров наследования разрешений :
$inhFlags = [System.Security.AccessControl.InheritanceFlags]::None
$prFlags = [System.Security.AccessControl.PropagationFlags]::None
Тип доступа (Разрешить/Запретить):
$acType = [System.Security.AccessControl.AccessControlType]::Allow
Создайте правило доступа:
$rule = New-Object System.Security.AccessControl.RegistryAccessRule ($idRef, $regRights, $inhFlags, $prFlags, $acType)
Добавьте новое правило к текущему ACL:
$rights.AddAccessRule($rule)
Примените новые разрешения к ключу реестра:
$rights | Set-Acl -Path 'HKCU:\Control Panel\Desktop\NewKey'
Убедитесь, что новая группа появилась в ACL ключа реестра.
Получение значения реестра с удаленного компьютера с помощью PowerShell
PowerShell позволяет получить доступ к реестру удаленного компьютера. Подключиться к удаленному компьютеру можно либо с помощью WinRM (Invoke-Command или Enter-PSSession). Чтобы получить значение параметра реестра с удаленного компьютера:
Invoke-Command –ComputerName srv-fs1 –ScriptBlock {Get-ItemProperty -Path 'HKLM:\System\Setup' -Name WorkingDirectory}
Или используя удаленное подключение к реестру (служба RemoteRegistry должна быть включена)
$Server = "lon-fs1"
$Reg = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalMachine', $Server)
$RegKey= $Reg.OpenSubKey("System\Setup")
$RegValue = $RegKey.GetValue("WorkingDirectory")
Итак, мы рассмотрели типичные примеры использования PowerShell для доступа и управления записями реестра Windows. Вы можете использовать их в своих сценариях автоматизации.