Работа с реестром powershell: Работа с ключами и записями реестра Windows из PowerShell
Содержание
Работа с ключами и записями реестра Windows из PowerShell
Для работы с реестром Windows не обязательно использовать графический редактор
regedit.exe
, или утилиту командной строки
reg.exe.
PowerShell предоставляет администратору большое количество инструментов для взаимодействия с реестром. С помощью PowerShell вы можете создать, изменить или удалить ключ/параметр реестра, выполнить поиск значения и подключиться к реестру на удаленном компьютере.
Содержание:
- Навигация в реестре с помощью PowerShell
- Получить значение параметра реестра с помощью PowerShell
- Изменить значение параметра реестра из PowerShell
- Как создать новый раздел (ключ) или параметр реестра из командной строки PowerShell?
- Удаление раздела или параметра реестра
- Как переименовать ветку или параметр реестра?
- Поиск в реестре с помощью PowerShell
- Управление правами на ветки реестра из PowerShell
- Удаленный доступ к реестру с помощью PowerShell
Навигация в реестре с помощью PowerShell
Работа с реестром Windows в PowerShell похожа на работу с обычными файлами на локальном диске. Основное отличие в том, что в этой концепции ветки реестра являются аналогом файлов, а ключи (параметры) реестра – свойствами этих файлов.
Выведите список доступных дисков на компьютере:
get-psdrive
Обратите внимание, что среди обычных дисков (с назначенными буквами дисков) есть особые устройства, доступные через провайдера Registry – HKCU (HKEY_CURRENT_USER) и HKLM (HKEY_LOCAL_MACHINE). Вы можете перемещаться по дереву реестра так же как вы перемещаетесь по дискам. Для обращения к определенному кусту реестра используется адресация HKLM:\ и HKCU:\.
cd HKLM:\
Dir -ErrorAction SilentlyContinue
Т.е. вы можете обращаться к веткам реестра и им значениям (параметрам) с помощью тех же командлетов PowerShell, которые вы используете для управления файлами.
Для обращения к веткам (разделам реестра) используются командлеты с -Item:
-
Get-Item
– получить информацию о ветке реестра -
New-Item
— создать новый раздел реестра -
Remove-Item
– удалить ветку реестра
Ключи (параметры) реестра нужно рассматривать, как свойства ветки реестра (аналогично свойствам файла). Для работы с параметрами реестра используются командлеты, заканчивающиеся на -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
Обратите внимание, что параметры, хранящиеся в ветке реестра, считаются не вложенными объектами (не аналогом файлов на файловой системе), а параметрами (Property) конкретной ветки реестра. Т.е. у любой ветке реестра может быть любое количество параметров.
Выведите содержимое текущей ветки командой:
dir
или
Get-ChildItem
Как вы видите, команда вывела информацию о вложенных ветках реестра и их свойствах. Но не вывела информацию о параметр SearchOrderConfig, который является свойством текущей ветки.
Чтобы получить список параметров (свойств) ветки реестра, выполните:
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
Чтобы изменить значение параметра реестра, воспользуйтесь командлетом 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 и значением file_name.txt :
New-ItemProperty -Path $HKCU_Desktop\NewKey -Name "SuperParamString" -Value ”file_name.
txt” -PropertyType "String"
Убедитесь, что в реестре появился новый ключ и параметр.
Как из PowerShell проверить, что раздел реестра существует?
Если вам нужно проверить, существует ли раздел определенный реестра, используйте командлет 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 'Параметр реестра существует' }
else
{ New-ItemProperty -Path $regkey -Name $regparam -Value ”new_value” -PropertyType "String" }
С помощью командлета Copy-Item можно скопировать записи из одной ветки реестра в другую
$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
Примечание. Ключ –Recurse говорит о том, что нужно рекурсивно без подтверждения удалить все вложенные подразделы.
Для удаления всех вложенных веток реестра (но не самого раздела):
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 '*win*'){
Write-Host $_.Name ' = ' $_.Value
}
}
Для поиска ветки реестра с определенным именем:
Get-ChildItem -path hkcu:\ -recurse -ErrorAction SilentlyContinue | Where-Object {$_.Name -like "*winitpro*"}
Управление правами на ветки реестра из PowerShell
С помощью командлета Get-Acl вы можете получить текущие права на ветку реестра (командлет Get-ACL позволяет также управлять NTFS разрешениями на файлы и папки).
$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
Тип доступа (Allow/Deny):
$acType = [System.Security.AccessControl.AccessControlType]::Allow
Создайте правило:$rule = New-Object System.Security.AccessControl.RegistryAccessRule ($idRef, $regRights, $inhFlags, $prFlags, $acType)
Добавим новое правило к текущему списку:
$rights.AddAccessRule($rule)
Применить новые права к ветке реестра:
$rights | Set-Acl -Path 'HKCU:\Control Panel\Desktop\NewKey'
Проверьте, что новые в списке доступа к ветке реестра появилась новая группа пользователей.
Удаленный доступ к реестру с помощью PowerShell
PowerShell позволяет получить доступ к реестру удаленного компьютера. К удаленном компьютеру можно подключится через WinRM (Invoke-Command или Enter-PSSession). Чтобы получить значение параметра реестра на удаленном компьютере, выполните:
Invoke-Command –ComputerName srv-fs1 –ScriptBlock { Get-ItemProperty -Path 'HKLM:\System\Setup' -Name WorkingDirectory}
Или вы можете использовать подключение к удаленному реестру (служба RemoteRegistry должна быть включена):
$Server = "srv-fs1"
$Reg = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalMachine', $Server)
$RegKey= $Reg.OpenSubKey("System\Setup")
$RegValue = $RegKey.GetValue("WorkingDirectory")
Совет. Если нужно создать/изменить определённый параметр реестра на нескоьких компьютерах домена AD, проще воспользоваться возможностями GPO.
Итак, мы рассмотрели типовые примеры использования PowerShell для работы с системным реестром Windows. Как вы видите, ничего сложного. Возможности редактирования реестра Windows из PowerShell очень удобно использовать различных скриптах автоматизации.
Работа с записями реестра — PowerShell
-
Статья -
-
Этот пример применяется только к платформам Windows.
Так как записи реестра являются свойствами разделов и, как таковые, не могут просматриваться напрямую, при работе с ними необходимо использовать несколько иной подход.
Перечисление записей реестра
Существует несколько способов просмотра реестра. Самый простой — получить имена свойств, связанные с разделом. Например, чтобы просмотреть имена записей в разделе реестра HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion
, используйте Get-Item
. Разделы реестра имеют свойство с универсальным именем «Property», которое является списком записей реестра в разделе. Следующая команда выбирает свойство Property и развертывает элементы таким образом, чтобы они отображались в списке:
Get-Item -Path Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion | Select-Object -ExpandProperty Property
DevicePath MediaPathUnexpanded ProgramFilesDir CommonFilesDir ProductId
Чтобы просмотреть записи реестра в более удобочитаемой форме, используйте Get-ItemProperty
.
Get-ItemProperty -Path Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion
ProgramFilesDir : C:\Program Files CommonFilesDir : C:\Program Files\Common Files ProgramFilesDir (x86) : C:\Program Files (x86) CommonFilesDir (x86) : C:\Program Files (x86)\Common Files CommonW6432Dir : C:\Program Files\Common Files DevicePath : C:\WINDOWS\inf MediaPathUnexpanded : C:\WINDOWS\Media ProgramFilesPath : C:\Program Files ProgramW6432Dir : C:\Program Files SM_ConfigureProgramsName : Set Program Access and Defaults SM_GamesName : Games PSPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWA RE\Microsoft\Windows\CurrentVersion PSParentPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWA RE\Microsoft\Windows PSChildName : CurrentVersion PSDrive : HKLM PSProvider : Microsoft.PowerShell.Core\Registry
Все свойства Windows PowerShell раздела имеют префиксы PS, например PSPath, PSParentPath, PSChildName и PSProvider.
Для создания ссылки на текущее расположение можно использовать нотацию *.*
. Set-Location
можно использовать для изменения значения на контейнер реестра CurrentVersion.
Set-Location -Path Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion
Кроме того, вы можете использовать встроенный HKLM:
PSDrive с Set-Location
:
Set-Location -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion
Затем можно использовать нотацию .
для текущего расположения, чтобы перечислить свойства без указания полного пути.
Get-ItemProperty -Path .
... DevicePath : C:\WINDOWS\inf MediaPathUnexpanded : C:\WINDOWS\Media ProgramFilesDir : C:\Program Files ...
Расширение пути работает так же, как и в файловой системе, поэтому из этого расположения можно получить список ItemProperty для HKLM:\SOFTWARE\Microsoft\Windows\Help
использования Get-ItemProperty -Path ..\Help
.
Получение одной записи реестра
Если необходимо получить конкретную запись в разделе реестра, можно использовать один из нескольких возможных подходов. Этот пример получает значение DevicePath в HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion
.
Вместе с Get-ItemProperty
используйте параметр Path, чтобы указать имя раздела и параметр Name, а также имя записи DevicePath.
Get-ItemProperty -Path HKLM:\Software\Microsoft\Windows\CurrentVersion -Name DevicePath
DevicePath : C:\WINDOWS\inf PSPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion PSParentPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\Software\Microsoft\Windows PSChildName : CurrentVersion PSDrive : HKLM PSProvider : Microsoft.PowerShell.Core\Registry
Эта команда возвращает стандартные свойства Windows PowerShell, а также свойство DevicePath.
Примечание
Хотя Get-ItemProperty
имеет параметры Filter, Include и Exclude , их нельзя использовать для фильтрации по имени свойства. Эти параметры относятся в разделам реестра (путям элементов), а не к записям реестра (свойствам элементов).
Другой вариант — использовать программу командной reg.exe
строки. Для получения справки по reg.
введите exe
reg.exe /?
в командной строке. Чтобы найти запись DevicePath , используйте reg.exe
, как показано в следующей команде:
reg query HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion /v DevicePath
! REG.EXE VERSION 3.0 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion DevicePath REG_EXPAND_SZ %SystemRoot%\inf
Вы также можете использовать COM-объект WshShell для поиска некоторых записей реестра, хотя этот метод не работает с большими двоичными данными или с именами записей реестра, которые содержат символы, такие как обратная косая черта (\
). Добавьте имя свойства с разделителем «\
» в путь элемента:
(New-Object -ComObject WScript.Shell).RegRead("HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\DevicePath")
%SystemRoot%\inf
Настройка одной записи реестра
Если необходимо изменить определенную запись в разделе реестра, можно использовать один из нескольких подходов. Этот пример изменяет запись Path в разделе
HKEY_CURRENT_USER\Environment
. Запись Path указывает расположение для поиска исполняемых файлов.
- Получите текущее значение записи Path с помощью
Get-ItemProperty
. - Добавьте новое значение, отделив его с помощью
;
. - Используйте
Set-ItemProperty
с указанным разделом, именем записи и значением, чтобы изменить запись реестра.
$value = Get-ItemProperty -Path HKCU:\Environment -Name Path $newpath = $value.Path += ";C:\src\bin\" Set-ItemProperty -Path HKCU:\Environment -Name Path -Value $newpath
Примечание
Хотя Set-ItemProperty
имеет параметры Filter, Include и Exclude , их нельзя использовать для фильтрации по имени свойства. Эти параметры относятся в разделам реестра (путям элементов), а не к записям реестра (свойствам элементов).
Другой вариант — использовать средство командной строки Reg.exe. Для получения справки по reg.exe введите reg.exe /?
в командной строке.
В следующем примере запись Path изменяется за счет удаления пути, добавленного в предыдущем примере.
Get-ItemProperty
по-прежнему используется для получения текущего значения, исключая анализ строки, возвращаемой reg query
. Методы SubString и LastIndexOf используются для получения последнего добавленного пути в запись Path.
$value = Get-ItemProperty -Path HKCU:\Environment -Name Path $newpath = $value.Path.SubString(0, $value.Path.LastIndexOf(';')) reg add HKCU\Environment /v Path /d $newpath /f
The operation completed successfully.
Создание записей реестра
Чтобы добавить новую запись реестра с именем PowerShellPath в раздел CurrentVersion, используйтеNew-ItemProperty
с путем к разделу, именем записи и значением записи. В этом примере используется значение переменной Windows PowerShell
$PSHome
, в которой хранится путь к каталогу установки Windows PowerShell.
Вы можете добавить новую запись в ключ с помощью следующей команды, а команда также возвращает сведения о новой записи:
New-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion -Name PowerShellPath -PropertyType String -Value $PSHome
PSPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion PSParentPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows PSChildName : CurrentVersion PSDrive : HKLM PSProvider : Microsoft.PowerShell.Core\Registry PowerShellPath : C:\Program Files\Windows PowerShell\v1.0
Значение PropertyType должно быть именем элемента перечисления Microsoft.Win32.RegistryValueKind из следующей таблицы:
Значение PropertyType | Значение |
---|---|
Двоичные данные | Двоичные данные |
DWord | Число, которое является допустимым UInt32 |
ExpandString | Строка, которая может содержать динамически раскрывающиеся переменные среды |
MultiString | Многострочная строка |
Строка | Любое строковое значение |
QWord | 8 байтов двоичных данных |
Запись реестра можно добавить в несколько расположений, указав массив значений для параметра Path:
New-ItemProperty -Name PowerShellPath -PropertyType String -Value $PSHome ` -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion, HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion
Кроме того, можно перезаписать существующее значение записи реестра, добавив параметр Force в любую команду New-ItemProperty
.
Переименование записей реестра
Чтобы переименовать запись PowerShellPath в PSHome, используйте Rename-ItemProperty
.
Rename-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion -Name PowerShellPath -NewName PSHome
Чтобы отобразить переименованное значение, добавьте параметр PassThru в команду.
Rename-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion -Name PowerShellPath -NewName PSHome -passthru
Удаление записей реестра
Чтобы удалить записи реестра PSHome и PowerShellPath, используйте Remove-ItemProperty
.
Remove-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion -Name PSHome Remove-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion -Name PowerShellPath
Работа с разделами реестра — PowerShell
- Статья
Этот пример применим только к платформам Windows.
Поскольку ключи реестра являются элементами на дисках PowerShell, работа с ними очень похожа на работу
с файлами и папками. Одним из важных отличий является то, что каждый элемент в PowerShell на основе реестра
диск — это контейнер, как и папка на диске файловой системы. Однако записи реестра и их
связанные значения являются свойствами элементов, а не отдельными элементами.
Список всех подразделов раздела реестра
Вы можете отобразить все элементы непосредственно в разделе реестра, используя Get-ChildItem
. Добавьте необязательный
Принудительно параметр для отображения скрытых или системных элементов. Например, эта команда отображает элементы
непосредственно на диске PowerShell HKCU:
, что соответствует реестру HKEY_CURRENT_USER
куст:
Get-ChildItem -Path HKCU:\ | Имя объекта выбора
Куст: Microsoft.PowerShell.Core\Registry::HKEY_CURRENT_USER Имя ---- HKEY_CURRENT_USER\AppEvents HKEY_CURRENT_USER\Консоль HKEY_CURRENT_USER\Панель управления HKEY_CURRENT_USER\Директшоу HKEY_CURRENT_USER\фиктивный HKEY_CURRENT_USER\Окружающая среда HKEY_CURRENT_USER\EUDC HKEY_CURRENT_USER\Раскладка клавиатуры HKEY_CURRENT_USER\MediaFoundation HKEY_CURRENT_USER\Майкрософт HKEY_CURRENT_USER\Сеть HKEY_CURRENT_USER\Принтеры HKEY_CURRENT_USER\Программное обеспечение HKEY_CURRENT_USER\Система HKEY_CURRENT_USER\Удалить HKEY_CURRENT_USER\WXP HKEY_CURRENT_USER\Нестабильная среда
Это ключи верхнего уровня, видимые под 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
или ls
в оболочке UNIX. Для отображения содержащихся элементов необходимо указать параметр Recurse . Чтобы перечислить все
ключи реестра в HKCU:
используйте следующую команду.
Get-ChildItem -Path HKCU:\ -Recurse
Get-ChildItem
может выполнять сложную фильтрацию с помощью своих Path , Filter ,
Включить параметры и Исключить параметры , но эти параметры обычно основаны только на имени. Ты
может выполнять сложную фильтрацию на основе других свойств элементов с помощью командлета Where-Object
.
Следующая команда находит все ключи в пределах HKCU:\Software
, которые имеют не более одного подраздела и
также имеют ровно четыре значения:
Get-ChildItem -Path HKCU:\Software -Recurse | Где-объект {($_.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
Вы по-прежнему можете использовать другие инструменты, которые у вас уже есть, для создания копий файловой системы. Любой реестр
инструменты редактирования, в том числе reg.exe
, regini.exe
, regedit.exe
и COM-объекты, которые поддерживают
редактирование реестра, например WScript.Shell и класс WMI StdRegProv , можно использовать изнутри
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 с пробелами в имени'
Удаление всех ключей под определенным ключом
Вы можете удалить содержащиеся элементы с помощью Remove-Item
, но вам будет предложено подтвердить удаление
если элемент содержит что-либо еще. Например, если мы попытаемся удалить
HKCU:\CurrentVersion
созданный нами подраздел, мы видим это:
Remove-Item -Path HKCU:\CurrentVersion
Подтвердить Элемент в HKCU:\CurrentVersion\AdminDebug имеет дочерние элементы и -recurse параметр не указан. Если вы продолжите, все дочерние элементы будут удалены с предмет. Вы уверены что хотите продолжить? [Y] Да [A] Да для всех [N] Нет [L] Нет для всех [S] Приостановить [?] Справка (по умолчанию "Y"):
Чтобы удалить содержащиеся элементы без запроса, укажите параметр Recurse :
Remove-Item -Path HKCU:\CurrentVersion -Recurse
Если вы хотите удалить все элементы в пределах HKCU:\CurrentVersion
, но не HKCU:\CurrentVersion
вместо этого вы можете использовать:
Remove-Item -Path HKCU:\CurrentVersion\* -Recurse
Работа с записями реестра — PowerShell
- Статья
Этот пример применим только к платформам Windows.
Поскольку записи реестра являются свойствами ключей и, как таковые, не могут быть просмотрены напрямую, нам необходимо
используйте несколько иной подход при работе с ними.
Список записей реестра
Существует множество различных способов проверки записей реестра. Самый простой способ — получить недвижимость
имена, связанные с ключом. Например, чтобы увидеть имена записей в разделе реестра
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion
, используйте Get-Item
. Ключи реестра имеют
свойство с общим именем «Свойство», которое представляет собой список записей реестра в ключе.
Следующая команда выбирает свойство Property и расширяет элементы, чтобы они отображались в
список:
Get-Item -Path Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion | Select-Object -ExpandProperty Свойство
Путь устройства MediaPathUnexpanded ProgramFilesDir CommonFilesDir Идантификационный номер продукта
Чтобы просмотреть записи реестра в более удобочитаемой форме, используйте Get-ItemProperty
:
Get-ItemProperty -Path Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion
ProgramFilesDir : C:\Program Files CommonFilesDir: C:\Program Files\Common Files ProgramFilesDir (x86): C:\Program Files (x86) CommonFilesDir (x86): C:\Program Files (x86)\Common Files CommonW6432Dir : C:\Program Files\Common Files Путь устройства: C:\WINDOWS\inf MediaPathUnexpanded: C:\WINDOWS\Media Путь к ProgramFiles: C:\Program Files ProgramW6432Dir : C:\Program Files SM_ConfigureProgramsName: установить доступ к программе и значения по умолчанию SM_GamesName : Игры PSPath: Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWA RE\Microsoft\Windows\CurrentVersion PSParentPath: Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWA RE\Майкрософт\Виндовс PSChildName : Текущая Версия PSДиск: HKLM PSProvider : Microsoft.PowerShell.Core\Registry
Все свойства ключа, связанные с Windows PowerShell, имеют префикс «PS», например
PSPath , PSParentPath , PSChildName и PSProvider .
Вы можете использовать нотацию *.*
для ссылки на текущее местоположение. Вы можете использовать Set-Location
для
сначала перейдите в контейнер реестра CurrentVersion :
Set-Location -Path Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion
В качестве альтернативы вы можете использовать встроенный HKLM:
PSDrive с Set-Location
:
Set-Location -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion
Затем вы можете использовать .
обозначение для текущего местоположения, чтобы перечислить свойства без
указание полного пути:
Get-ItemProperty -Path .
... Путь устройства: C:\WINDOWS\inf MediaPathUnexpanded: C:\WINDOWS\Media ProgramFilesDir : C:\Program Files ...
Расширение пути работает так же, как и в файловой системе, поэтому из этого места вы можете получить
список ItemProperty для HKLM:\SOFTWARE\Microsoft\Windows\Help
с использованием
Get-ItemProperty -Path ..\Help
.
Получение одной записи реестра
Если вы хотите получить определенную запись в разделе реестра, вы можете использовать один из нескольких возможных вариантов.
подходит. В этом примере выполняется поиск значения DevicePath в
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion
.
С помощью Get-ItemProperty
используйте параметр Path , чтобы указать имя ключа и
Параметр Name для указания имени записи DevicePath .
Get-ItemProperty -Path HKLM:\Software\Microsoft\Windows\CurrentVersion -Name DevicePath
Путь устройства: C:\WINDOWS\inf PSPath: Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion PSParentPath: Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\Software\Microsoft\Windows PSChildName : Текущая Версия PSДиск: HKLM PSProvider : Microsoft.PowerShell.Core\Registry
Эта команда возвращает стандартные свойства Windows PowerShell, а также DevicePath
свойство.
Примечание
Хотя Get-ItemProperty
имеет параметры Filter , Include и Exclude , они не могут
использоваться для фильтрации по имени свойства. Эти параметры относятся к разделам реестра, которые являются элементом
пути, а не записи реестра, которые являются свойствами элемента.
Другой вариант — использовать reg.exe 9Инструмент командной строки 0022.
Чтобы получить справку по
reg.exe
, введите reg.exe /?
в командной строке. Чтобы найти запись DevicePath , используйте reg.exe
, как показано ниже.
команда:
reg запрос HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion /v DevicePath
! РЕГ.EXE ВЕРСИЯ 3.0 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion Путь устройства REG_EXPAND_SZ %SystemRoot%\inf
Вы также можете использовать COM-объект WshShell для поиска некоторых записей реестра, хотя этот метод
не работает с большими двоичными данными или с именами записей реестра, которые содержат такие символы, как
обратная косая черта ( \
). Добавьте имя свойства к пути элемента с разделителем \
:
(New-Object -ComObject WScript.Shell).RegRead("HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\DevicePath")
%SystemRoot%\inf
Настройка одной записи реестра
Если вы хотите изменить определенную запись в разделе реестра, вы можете использовать один из нескольких возможных
подходит. В этом примере изменяется запись Path в разделе
HKEY_CURRENT_USER\Environment 9.0022 .
Запись Path указывает, где найти исполняемые файлы.
- Получить текущее значение записи Path с помощью
Get-ItemProperty
. - Добавьте новое значение, разделив его
;
. - Используйте
Set-ItemProperty
с указанным ключом, именем записи и значением для изменения реестра
вход.
$value = Get-ItemProperty -Path HKCU:\Environment -Name Путь $newpath = $value.Path += ";C:\src\bin\" Set-ItemProperty -Path HKCU:\Environment -Name Path -Value $newpath
Примечание
Хотя Set-ItemProperty
имеет параметры Filter , Include и Exclude , они
нельзя использовать для фильтрации по имени свойства. Эти параметры относятся к разделам реестра, которые являются элементом
пути, а не записи реестра, которые являются свойствами элемента.
Другой вариант — использовать инструмент командной строки Reg.exe. Чтобы получить справку по reg.exe, введите reg.exe /?
в
командная строка.
В следующем примере изменяется Путь , удалив путь, добавленный в приведенном выше примере.
Get-ItemProperty
по-прежнему используется для получения текущего значения, чтобы избежать разбора строки.
возвращено из reg-запроса
. Методы SubString и LastIndexOf используются для извлечения
последний путь добавлен в запись Путь .
$value = Get-ItemProperty -Path HKCU:\Environment -Name Путь $newpath = $value.Path.SubString(0, $value.Path.LastIndexOf(';')) reg добавить HKCU\Environment /v путь /d $новый путь /f
Операция успешно завершена.
Создание новых записей реестра
Чтобы добавить новую запись с именем «PowerShellPath» в раздел CurrentVersion , используйте New-ItemProperty
с
путь к ключу, имя записи и значение записи. Для этого примера мы возьмем
значение переменной Windows PowerShell $PSHome
, в которой хранится путь к установке
каталог для Windows PowerShell.
Вы можете добавить новую запись в ключ, используя следующую команду, и команда также возвращает
информация о новой записи:
New-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion -Name PowerShellPath -PropertyType String -Value $PSHome
PSPath: Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion PSParentPath: Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows PSChildName : Текущая Версия PSДиск: HKLM PSProvider : Microsoft.PowerShell.Core\Registry Путь к PowerShell: C:\Program Files\Windows PowerShell\v1.0
Тип PropertyType должен быть именем члена перечисления Microsoft.Win32.RegistryValueKind .
из следующей таблицы:
PropertyType Значение | Значение |
---|---|
Двоичный | Двоичные данные |
DWord | Допустимый номер UInt32 |
ExpandString | Строка, которая может содержать динамически расширяемые переменные среды |
Многострочный | Многострочная строка |
Строка | Любое строковое значение |
QWord | 8 байт двоичных данных |
Вы можете добавить запись реестра в несколько местоположений, указав массив значений для пути
параметр:
New-ItemProperty -Name PowerShellPath -PropertyType String -Value $PSHome ` -Путь HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion, HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion
Вы также можете перезаписать ранее существовавшее значение записи реестра, добавив параметр Force к любому
Команда New-ItemProperty
.