Разное

Powershell работа с реестром: Работа с записями реестра — PowerShell

30.10.2000

Содержание

Работа с записями реестра — PowerShell

  • Статья
  • Чтение занимает 4 мин
  • Участники: 2

Были ли сведения на этой странице полезными?

Да Нет

Хотите оставить дополнительный отзыв?

Отзывы будут отправляться в корпорацию Майкрософт. Нажав кнопку «Отправить», вы разрешаете использовать свой отзыв для улучшения продуктов и служб Майкрософт. Политика конфиденциальности.

Отправить

В этой статье

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

Создание списков записей реестра

Существует несколько способов просмотра реестра. Самый простой — получить имена свойств, связанные с разделом. Например, чтобы просмотреть имена записей в разделе реестра 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
PSPath              : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SO
                      FTWARE\Microsoft\Windows\CurrentVersion
PSParentPath        : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SO
                      FTWARE\Microsoft\Windows
PSChildName         : CurrentVersion
PSDrive             : HKLM
PSProvider          : Microsoft.PowerShell.Core\Registry
DevicePath          : C:\WINDOWS\inf
MediaPathUnexpanded : C:\WINDOWS\Media
ProgramFilesDir     : C:\Program Files
CommonFilesDir      : C:\Program Files\Common Files
ProductId           : 76487-338-1167776-22465
WallPaperDir        : C:\WINDOWS\Web\Wallpaper
MediaPath           : C:\WINDOWS\Media
ProgramFilesPath    : C:\Program Files
PF_AccessoriesName  : Accessories
(default)           :

Все свойства 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
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
DevicePath   : C:\WINDOWS\inf

Эта команда возвращает стандартные свойства 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 указывает расположение для поиска исполняемых файлов.

  1. Получите текущее значение записи Path
    с помощью Get-ItemProperty.
  2. Добавьте новое значение, отделив его с помощью ;.
  3. Используйте 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

  • Статья
  • Чтение занимает 3 мин
  • Участники: 2

Были ли сведения на этой странице полезными?

Да Нет

Хотите оставить дополнительный отзыв?

Отзывы будут отправляться в корпорацию Майкрософт. Нажав кнопку «Отправить», вы разрешаете использовать свой отзыв для улучшения продуктов и служб Майкрософт. Политика конфиденциальности.

Отправить

В этой статье

Так как разделы реестра представляют собой элементы на дисках 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 или команда ls оболочки UNIX. Для показа вложенных элементов необходимо указать параметр 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

Для копирования файловой системы можно использовать и другие доступные средства. В оболочке Windows PowerShell можно использовать любые средства для редактирования реестра (в том числе reg.exe, regini.exe и regedit.exe), а также COM-объекты, поддерживающие редактирование реестра (такие как WScript.Shell и WMI-класс StdRegProv).

Создание разделов

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

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

Работа с ключами и записями реестра Windows из PowerShell

Для работы с реестром Windows не обязательно использовать графический редактор regedit.exe , или утилиту командной строки reg.exe. 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"

Вы можете использовать следующие типы данных для параметров в реестре:

  • Binary (REG_BINARY)
  • DWord (REG_DWORD)
  • Qword (REG_QWORD)
  • String (REG_SZ)
  • ExpandString (REG_EXPAND_SZ)
  • MultiString (REG_MULTI_SZ)
  • Unknown

Убедитесь, что в реестре появился новый ключ и параметр.

Как из 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

Работать с реестром можно не только с помощью RegEdit или команды REG.EXE, не менее удобно использовать встроенную во все современные версии Windows утилиту PowerShell. Причем основные задачи, такие как прямое или использующее объекты групповой политики, создание и редактирование реестра настроек ПК, PowerShell позволяет автоматизировать.

Для работы с реестром, в PowerShell, доступно много других команд и каждая из них имеет свой собственный синтаксис. Когда PowerShell только появился, в нем было всего лишь 129 команд, в Windows 8, команд и функции стало уже более 2000. Не менее 57 команд, полный список их синтаксиса и возможное использование, вы можете найти на веб-сайте Microsoft MSDN по адресу http://pcs.tv/1x9NW1M.

PowerShell

Один из главных вопросов, с которым сталкиваются многие начинающие изучать PowerShell, является то, что команда (cmdlet) не работает так, как ожидалось. И очень распространенная проблема связана с правильной установкой Set-ExecutionPolicy. Для того, чтобы в тестовой среде виртуальной лаборатории, разрешить тесты ваших сценариев PowerShell, вам нужно в командной консоли с правами администратора, запустить новый PowerShell и в окне командной строки ввести следующую команду:

Get-ExecutionPolicy

Учтите, что в PowerShell, по умолчанию, существуют ограничения, то есть, для того, чтобы запуститься, скрипты должны иметь цифровую подпись. То есть для того, чтобы ваши скрипты работали в тестовой среде эту политику вам необходимо изменить на неограниченную.

Для этого введите следующую команду:

Set-ExecutionPolicy Unrestricted

При запуске командлета, появится предупреждение. Чтобы принять политику установок введите «Y». Эта команда изменит ключ в реестре и разрешит запуск на вашем компьютере сценариев без цифровой подписи.

PowerShell может изменять параметры реестра, системы, хранилища сертификатов, и многих других областей, например, классы и дисководы.

Введите в PowerShell следующую команду:

Get-PSDrive

Вам будет предложен текущий список дисководов, с которыми PowerShell может взаимодействовать. PowerShell имеет доступ к двум ветвям реестра: HKEY_CURRENT_USER и HKEY_LOCAL_MACHINE. Так же, как и в файловой системе, при помощи PowerShell вы можете перемещаться в структуре реестра.

Попробуйте ввести следующее (не забудьте про двоеточие!):

CD HKCU: DIR

Если вы хотите просмотреть свойства ключа реестра, введите:

Get-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\PowerShell\1\ShellIds\ Microsoft.PowerShell

Здесь вы увидите свойства ключа и это должно соответствовать ранее настроенным параметрам.

Если вы хотите установить значение обратное Remote Signed, вы должны ввести:

Set-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell -Name «ExecutionPolicy» –Value «RemoteSigned»

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

Значение настроек реестра:

Verb — CMDLETS

Get — Get-GPPrefRegistryValue; Get-GPRegistryValue

Set — Set-GPPrefRegistryValue; Set-GPRegistryValue

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

ScanReg

Если вы используете старый компьютер, а не современную операционную систему, возможно вам по-прежнему необходимо управлять или ремонтировать ваш реестр. Windows Registry Checker Tool (Scanreg.exe) был добавлен в Windows 98, ME и NT для того, чтобы пользователи имели удобный инструмент для исправления проблем, оптимизации реестра и резервного копирования/ восстановления базы данных.

Для того, чтобы получить доступ к инструменту Scanreg, перезагрузите компьютер в специальном режиме «Безопасный режим с поддержкой командной строки». В Windows 98 будет создано ежедневное резервное копирование реестра.

Восстановление самого последнего реестра происходит следующим образом:

  • Введите в командной строке cd\windows\command и нажмите «Enter»
  • Введите Scanreg.exe/restore
  • В списке выберите необходимую резервную копию реестра и нажмите клавишу Enter.

После этого ПК будет восстанавливаться, затем перезагрузите компьютер. Также может быть вызвана и графическая версия интерфейса ScanRegw. Для чего в меню «Пуск» выберите пункт «Выполнить» и наберите scanregw.

Внимание. Инструмент Scanreg устарел и в современные версии Windows больше не включается.

Process Monitor

Process Monitor (ProcMon) один из наиболее полных и мощных инструментов для работы с реестром. Конечно, встроенный в систему инструмент RegEdit предоставляет пользователю базовые возможности редактирование и некоторую функциональность, но возможности Process Monitor в ближайшее время сделают привычный инструмент дилетантским.

Process Monitor в состав Windows не входит, но он бесплатный и полностью поддерживается корпорацией Майкрософт. Вы можете либо скачать его и установить, либо запустить непосредственно с веб-сайта Sysinternals на http://technet.microsoft.com/sysinternals.

Process Monitor позволяет отслеживать, записывать и сохранять всю активность Windows, в режиме реального времени (то есть, динамически). Он видит всю файловую систему, реестр и деятельность процессов / потоков с возможностью входа, анализа и фильтрации результатов. В первую очередь нас интересует его способность фокусироваться на активности реестра. Многие профессионалы считают этот инструмент мониторинга систем Windows, из-за его дополнительных функций, в том числе живой фильтрации и возможности сохранения деталей сессии в формате Process Monitor (PML), что в дальнейшем позволяет их последующий анализ, де-факто передовым.

Внимание. Два предыдущих поколения утилит Sysinternals, FileMon (Monitor File) и RegMon (Registry Monitor), были объединены в один новый инструмент — Process Monitor.

Даже без применения фильтров Process Monitor захватывает ошеломляющее количество данных, в течение всего 10 минут регистрируется более миллиона событий. Однако, для того, чтобы получить и сосредоточиться на обработке нужных данных, очень важно понять как применять фильтры.

Одна из наиболее полезных функций инструмента — возможность применения и дальнейшего сохранения фильтров для последующего использования. Однако базовые данные независимо от приложенных фильтров по-прежнему доступны и если вы их сбросите, все данные будут восстановлены. Простая фильтрация может быть применена с помощью переключаемых событий класса фильтра.

Как показано в диалоговом окне выбора колонок, Process Monitor может отображать широкий спектр данных, таких как время, дата, тип, путь, имя пользователя, и будет ли процесс работать в режиме виртуализации UAC.

И хотя встроенная фильтрация, сначала может показаться привлекательной, для многих пользователей потребуются дополнительные возможности. Process Monitor может фильтровать результаты по каждой из колонок и, используя логические операторы OR и AND, объединять их. Для того, чтобы создать свой собственный фильтр, нажмите Ctrl + L или выберите в строке меню «Фильтр», а затем в диалоговом окне Process Monitor используя раскрывающееся меню, выберите какую колонку или заголовок включить/исключить из фильтрации. Можно фильтровать и свободные значения, например, «Операции связанные с REG», будет фильтровать влияющую на реестр активность.

Если вы создаете набор фильтров, которые хотите использовать повторно, вы можете сохранить свою конфигурацию в меню «Фильтр», с помощью параметра «Сохранить фильтр».

Внимание. Process Monitor, после запуска, будет собирать данные непрерывно. Каждый последующий примененный фильтр будет фильтровать все возрастающее количество данных. Если вы хотите сбросить данные, остановите применение фильтра, а затем перезапустите утилиту.

Ранее, для изменения ExecutionPolicy на своем компьютере, мы использовали PowerShell. Для того, чтобы проиллюстрировать возможности Process Monitor, давайте создадим фильтр, отслеживающий активность реестра в процессе PowerShell.exe перед запуском команды Set ExecutionPolicy. Результаты вы можете увидеть ниже. Значение системного реестра выделено.

Вы можете щелкнуть правой кнопкой мыши по нужному вам пункту и в контекстном меню выбрать открытие и просмотр недавно измененных записей реестра. Если вы хотите просто просмотреть детали сделанных вами изменений, выберите в контекстном меню свойства элемента.

Очистка реестра

О сравнительных достоинствах или недостатках сторонних чистильщиков реестра и утилит, особенно на современных быстрых ПК, существует целая дискуссия, мол они вообще не представляют какой-либо пользы. Однако, для тех, кому нравится чистить реестр сторонними утилитами, наиболее популярен — бесплатный CCleaner, который можно загрузить с www.piriform.com/ccleaner.

CCleaner — надежная утилита, которая перед выполнением каких-либо изменений, автоматически предложит сделать резервную копию реестра. Он будет искать пустые (т.е. неиспользованные и несвязанные) ключи реестра и удалит их. Использование очистки реестра уменьшит общий размер, и, следовательно, время загрузки, баз данных реестра, а также предотвратит повреждение данных. Дальше мы перечислим ряд популярных утилит для чистки реестра от сторонних производителей.

Инструмент — Цена — ОС

  1. AML Free Registry Cleaner — бесплатно — Windows XP / 2003 / Vista / Windows 7 / Windows 8 (32 и 64 бит)
  2. Auslogics Registry Cleaner — бесплатно — Windows XP / Vista / Windows 7 / Windows 8.1
  3. CCleaner — бесплатно — Windows 8.1, 8, 7, Vista и XP (32 и 64 бит), но не планшетные издания RT
  4. Easy Cleaner — бесплатно — Все версии Windows: 95/98 / ME / NT 3.51 (или более поздние версии) / 2000 / XP
  5. JetClean — бесплатно — Windows XP / 2000 / Vista / Windows 7 / Windows 8 (32 и 64 бит)
  6. Offline NT Password and Registry Editor — бесплатно — поддерживает все Windows от NT 3.5 до Win 8.1, плюс серверные версии
  7. RegCleaner — бесплатно — Windows XP, 2000, ME, 98, 95, NT
  8. Wise Registry Cleaner — бесплатно — Windows XP/Vista/ Windows 7/Windows 8.1

В то время как RegEdit — наиболее известная и, возможно, широко используемая утилита для редактирования и работы с реестром, она ни в коем случае не единственно доступна и ни более гибкая чем PowerShell.

И тем не менее, если вы хотите комфортно работать с реестром, есть инструменты или утилиты, которые помогут вам это делать. Вооружившись этим арсеналом, устранение проблем в реестре становится более простой задачей.

Работа с записями реестра

Поскольку записи реестра являются свойствами разделов, а потому не могут просматриваться напрямую, при работе с ними нужен немного другой подход.

Получение списка записей реестра

Существует много разных способов просмотра записей реестра. Простейшим способом является получение имен свойств, связанных с разделом. Например, для просмотра имен записей раздела реестра HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion используйте командлет Get-Item. Разделы реестра имеют свойство с универсальным именем «Property», содержащее список записей реестра в данном разделе. Следующая команда выбирает свойство Property и разворачивает элементы для отображения в виде списка:


PS> Get-Item -Path Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion | Select-Object -ExpandProperty Property
DevicePath
MediaPathUnexpanded
ProgramFilesDir
CommonFilesDir
ProductId

Для просмотра записей реестра в более удобной для чтения форме воспользуйтесь командлетом Get-ItemProperty:


PS> Get-ItemProperty -Path Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion


PSPath			: Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SO
					FTWARE\Microsoft\Windows\CurrentVersion
PSParentPath		: Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SO
					FTWARE\Microsoft\Windows
PSChildName		 : CurrentVersion
PSDrive			 : HKLM
PSProvider		: Microsoft.PowerShell.Core\Registry
DevicePath		: C:\WINDOWS\inf
MediaPathUnexpanded : C:\WINDOWS\Media
ProgramFilesDir	 : C:\Program Files
CommonFilesDir	: C:\Program Files\Common Files
ProductId		 : 76487-338-1167776-22465
WallPaperDir		: C:\WINDOWS\Web\Wallpaper
MediaPath		 : C:\WINDOWS\Media
ProgramFilesPath	: C:\Program Files
PF_AccessoriesName  : Accessories
(default)		 :

Все свойства раздела, относящиеся к Windows PowerShell, имеют префикс «PS», например, PSPath, PSParentPath, PSChildName и PSProvider.

При ссылке на текущее положение можно использовать обозначение .. Можно воспользоваться командлетом Set-Location, чтобы предварительно перейти к контейнеру реестра CurrentVersion:


Set-Location -Path Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion

Другой способ состоит в использовании встроенного диска HKLM в качестве параметра командлета Set-Location:


Set-Location -Path hklm:\SOFTWARE\Microsoft\Windows\CurrentVersion

После этого для обозначения текущего положения можно использовать знак . и не указывать полный путь при получении списка свойств:


PS> 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.


PS> Get-ItemProperty -Path HKLM:\Software\Microsoft\Windows\CurrentVersion -Name DevicePath


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
DevicePath   : C:\WINDOWS\inf

Эта команда возвращает как стандартные свойства Windows PowerShell, так и свойство DevicePath.

Примечание.

Командлет Get-ItemProperty имеет параметры Filter, Include и Exclude, но их нельзя использовать для фильтрации по имени свойств. Эти параметры относятся к разделу реестра (то есть путям к элементу), а не к записям реестра, которые являются свойствами элемента.

Другой способ состоит в использовании средства командной строки Reg.exe. Дополнительные сведения о средстве reg.exe можно получить, набрав reg.exe /? в командной строке. Чтобы найти запись DevicePath, воспользуйтесь reg.exe, как показано в следующей команде:


PS> 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

Для нахождения некоторых записей в реестре можно также использовать объект WshShell COM, однако этот метод не работает с большими блоками двоичных данных, а также в случаях, когда имена записей в реестре включают специальные знаки, такие как «\». Имя свойства добавляется к пути к элементу при помощи разделителя «\»:


PS> (New-Object -ComObject WScript.Shell).RegRead("HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\DevicePath")
%SystemRoot%\inf

Создание новых записей в реестре

Для добавления новой записи с именем «PowerShellPath» в раздел CurrentVersion воспользуйтесь командлетом New-ItemProperty, указав путь к разделу, имя записи и значение записи. В данном примере используется значение переменной Windows PowerShell $PSHome, которая хранит путь к каталогу установки Windows PowerShell.

Новую запись к разделу можно добавить при помощи следующей команды, которая также возвращает сведения о новой записи:


PS> New-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion -Name PowerShellPath -PropertyType String -Value $PSHome


PSPath		 : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWAR
				 E\Microsoft\Windows\CurrentVersion
PSParentPath   : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWAR
				 E\Microsoft\Windows
PSChildName	: CurrentVersion
PSDrive		: HKLM
PSProvider	 : Microsoft.PowerShell.Core\Registry
PowerShellPath : C:\Program Files\Windows PowerShell\v1.0

Параметр PropertyType должен содержать имя члена перечисления Microsoft.Win32.RegistryValueKind из следующей таблицы:

Значение PropertyType Значение

Binary

Двоичные данные

DWord

Допустимое число типа UInt32

ExpandString

Строка, которая может содержать динамически увеличивающиеся переменные среды

MultiString

Многострочный текст

String

Любое строковое значение

QWord

8 байт двоичных данных

Примечание.

Можно добавить запись в несколько положений в реестре, указав в качестве параметра Path массив значений:


New-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion, HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion -Name PowerShellPath -PropertyType String -Value $PSHome

Можно также переписать ранее существовавшую запись в реестре, добавив в любую команду New-ItemProperty параметр Force.

Переименование записей в реестре

Чтобы переименовать запись 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

Работа с разделами реестра

Поскольку разделы реестра представляют собой элементы на дисках Windows PowerShell, работа с ними очень похожа на работу с файлами и папками. Одно важное различие заключается в том, что каждый элемент реестрового диска Windows PowerShell представляет собой контейнер, как и папка на диске файловой системы. Однако записи реестра и связанные с ними значения являются свойствами элементов, а не отдельными элементами.

Получение всех подразделов раздела реестра

Показать все элементы, непосредственно содержащиеся в разделе реестра, можно при помощи командлета Get-ChildItem. Для отображения скрытых и системных элементов добавьте необязательный параметр Force. Например, эта команда отображает элементы, непосредственно расположенные на диске HKCU: Windows PowerShell, который соответствует кусту HKEY_CURRENT_USER:


PS> Get-ChildItem -Path hkcu:\


   Hive: Microsoft.PowerShell.Core\Registry::HKEY_CURRENT_USER

SKC  VC Name						 Property
---  -- ----						 --------
  2   0 AppEvents					{}
  7  33 Console						{ColorTable00, ColorTable01, ColorTab...
 25   1 Control Panel				{Opened}
  0   5 Environment					{APR_ICONV_PATH, INCLUDE, LIB, TEMP...}
  1   7 Identities					 {Last Username, Last User ...
  4   0 Keyboard Layout				{}
...

Это разделы верхнего уровня, которые можно видеть под разделом 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, Include и Exclude, но обычно с этими параметрами осуществляется лишь фильтрация по имени. Сложную фильтрацию на основе других свойств элементов можно выполнить при помощи командлета Where-Object. Следующая команда находит все подразделы раздела HKCU:\Software, у которых не более одного подраздела и ровно четыре значения:


Get-ChildItem -Path HKCU:\Software -Recurse | Where-Object -FilterScript {($_.SubKeyCount -le 1) -and ($_.ValueCount -eq 4) }

Копирование разделов

Копирование выполняется при помощи командлета Copy-Item. Следующая команда копирует раздел HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion и все его свойства в раздел HKCU:\, создавая новый подраздел с именем «CurrentVersion»:


Copy-Item -Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion' -Destination hkcu:

Если рассмотреть этот новый раздел в редакторе реестра или при помощи командлета Get-ChildItem, видно, что в новом расположении отсутствуют копии подразделов содержавшихся в исходном разделе. Чтобы копировать все содержимое контейнера, необходимо указать параметр Recurse. Копирование в предыдущем примере можно сделать рекурсивным, если использовать следующую команду:


Copy-Item -Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion' -Destination hkcu: -Recurse

Можно использовать и другие доступные средства для копирования файловой системы. В оболочке Windows PowerShell можно по-прежнему использовать любые средства для редактирования реестра (в том числе reg.exe, regini.exe и regedit.exe), а также COM-объекты, поддерживающие редактирование реестра (такие как WScript.Shell и WMI-класс StdRegProv).

Создание разделов

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


New-Item -Path hkcu:\software\_DeleteMe

Для указания раздела можно также использовать путь на основе имени поставщика:


New-Item -Path Registry::HKCU\_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, но не сам раздел, вместо этого введите следующую команду:


Remove-Item -Path HKCU:\CurrentVersion\* -Recurse

Работа в Powershell с реестром

Для работы в Powershell с реестром одной из основных команд является Get-ChildItem (аналог dir). Чтобы увидеть ветки нужно выполнить следующую команду:


Get-PSDrive -PSProvider Registry

Мы увидим два основных пути:

  • HKEY_CURRENT_USER
  • HKEY_LOCAL_MACHINE

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


Set-Location -Path HKLM:\
#или
cd HKLM:\

Или если не хотим переходить, но нам нужно получить содержимое:


Get-ChildItem -Path HKLM:\
#или
dir HKLM:\

Команды выше возвращает такой результат:

Hive — это путь, по которому мы получили объекты. То что выделено в области 1 — Name или имена объектов, а в области 2 — это свойства.

Мы не можем обратиться к объекту напрямую, что бы получить это свойство, так:


Get-ChildItem 'HKCU:\Control Panel\Accessibility\Blind Access'

У нас просто ничего не отобразится. Мы можем по ним фильтровать вывод используя следующие ключи:

  • Recurse -рекурсивный поиск. Объекты ищутся не только в текущей директории, но и внутри вложенных.
  • Include — позволяет искать словосочетание в строке. Например если написать так «*network*», то будут отображаться только объекты, где есть упоминание network, причем слева и справа может быть тоже текст благодаря *.
  • Exclude — исключает какое-то упоминание в результатах.

Например так мы найдем все объекты, которые содержат упоминание mouse и исключают keyboard:


Get-ChildItem 'HKCU:\Control Panel\Accessibility\' -Include "*mouse*" -Recurse -Exclude "*keyboard*"

Причем бел ключа Recurse Include и Exclude работать не будут.

Если нам нужно найти конкретное Property из вывода выше, нужно использовать where. В примере я ищу путь с упоминанием mouse и свойством Flags:


Get-ChildItem 'HKCU:\Control Panel\Accessibility\' -Include "*mouse*" -Recurse | where Property -eq Flags

Если нам нужно найти Property с конкретным значением, нужно использовать еще одну команду Get-ItemProperty. В моем случае я ищу MaximumSpeed со значением 80:


$path = Get-ChildItem 'HKCU:\Control Panel\Accessibility\' -Include "*mouse*" -Recurse
$path | Get-ItemProperty | where -Property MaximumSpeed -EQ 80

 

В предыдущих примерах мы нашли нужную ветку или свойство. Теперь попробуем изменить и создать.

Для изменения у нас есть следующих командлет:


$path = "HKLM:\SOFTWARE\Classes\AppUserModelId\Windows.SystemToast.Winlogon"
Set-ItemProperty -Path $path -Name "IconBackgroundColor" -Value 3

Где:

  • path — переменная с путем, где лежат наши свойства
  • Name — имя Property, которое хотим изменить
  • Value — новое значение

Или мы так же можем поменять через конвейер:


Get-ChildItem 'HKCU:\Control Panel\Accessibility\' -Include "*mouse*" -Recurse  | Set-ItemProperty -Name MaximumSpeed -Value 86

 

Для создания новых свойств мы должны выполнить аналогичную команду, но с приставкой New:


$vetka = "HKLM:\SOFTWARE\Classes\AppUserModelId\Microsoft.Office.OUTLOOK.EXE.15"
New-ItemProperty -Path $vetka -Name "ExchangeVal" -PropertyType String -Value 1

Как обычно мы передаем Path — переменную с путем и Name — имя новой ветки. PropertyType — это тип данных, который будет содержать наше значение. Оно может быть следующих значений:

  • String — эквивалент REG_SZ.
  • ExpandString — эквивалентно REG_EXPAND_SZ.
  • Binary — эквивалентно REG_BINARY.
  • DWord — эквивалентно REG_DWORD.
  • MultiString — эквивалентно REG_MULTI_SZ.
  • Qword — эквивалентно REG_QWORD.
  • Unknown — указывает, что это не поддерживаемый тип данных, которые есть в REG_RESOURCE_LIST.

Для создания новой ветки:


New-Item -Type Folder -Path $vetka -Name "ExchangeTree"

 

Для удаления Property используется эта команда:


$vetka = "HKLM:\SOFTWARE\Classes\AppUserModelId\Microsoft.Office.OUTLOOK.EXE.15"
Remove-ItemProperty -Path $vetka -Name "ExchangeVal"

Если мы хотим удалить ветку:


Remove-Item -Path "HKLM:\SOFTWARE\Classes\AppUserModelId\Microsoft.Office.OUTLOOK.EXE.15\ExchangeTree"

Скопировать можно так:


$dest = 'HKLM:\SOFTWARE\Classes\'
$from = $dest + 'AppUserModelId\Microsoft.Office.OUTLOOK.EXE.15\'
Copy-Item -Path $from -Destination $dest

 

Для работы на удаленном компьютере мы можем использовать PSRemoting — модуль для удаленного выполнения команд Powershell. Более подробно мы уже рассматривали. Для примера так я получу значение просто выполнив команду на компьютере AD1:


Invoke-Command -ComputerName AD1 -ScriptBlock {Get-ChildItem 'HKCU:\Control Panel\Accessibility\' -Include "*mouse*" -Recurse}

 

Теги: #powershell

Работа с ключами реестра — PowerShell

  • Статья
  • 3 минуты на чтение
  • 2 участника

Полезна ли эта страница?

да Нет

Любая дополнительная обратная связь?

Отзыв будет отправлен в Microsoft: при нажатии кнопки отправки ваш отзыв будет использован для улучшения продуктов и услуг Microsoft.Политика конфиденциальности.

Представлять на рассмотрение

В этой статье

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

Список всех подразделов ключа реестра

Вы можете отобразить все элементы непосредственно в разделе реестра, используя Get-ChildItem . Добавьте необязательный Параметр принудительно отображает скрытые или системные элементы. Например, эта команда отображает элементы непосредственно на диске PowerShell HKCU: , что соответствует реестру HKEY_CURRENT_USER улей:

  Get-ChildItem -Path HKCU:\ | Имя объекта выбора
  
  Куст: Майкрософт.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 может выполнять сложные функции фильтрации с помощью своего пути , 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 , можно использовать изнутри Windows PowerShell.

Создание ключей

Создание новых ключей в реестре проще, чем создание нового элемента в файловой системе. Потому что все ключи реестра являются контейнерами, тип элемента указывать не нужно; вы просто предоставляете явный путь, например:

  New-Item-путь HKCU:\Software_DeleteMe
  

Вы также можете использовать путь на основе провайдера для указания ключа:

  New-Item -Path Registry::HKCU\Software_DeleteMe
  

Удаление ключей

Удаление элементов практически одинаково для всех провайдеров.Следующие команды будут молча удалить элементы:

  Remove-Item — путь 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 :

  Удалить-Элемент-Путь HKCU:\CurrentVersion-Recurse
  

Если вы хотите удалить все элементы в пределах HKCU:\CurrentVersion , но не HKCU:\CurrentVersion вместо этого вы могли бы использовать:

  Remove-Item -Path HKCU:\CurrentVersion\* -Recurse
  

Работа с записями реестра — PowerShell

  • Статья
  • 5 минут на чтение
  • 4 участника

Полезна ли эта страница?

да Нет

Любая дополнительная обратная связь?

Отзыв будет отправлен в Microsoft: при нажатии кнопки отправки ваш отзыв будет использован для улучшения продуктов и услуг Microsoft.Политика конфиденциальности.

Представлять на рассмотрение

В этой статье

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

Список записей реестра

Существует множество различных способов проверки записей реестра.Самый простой способ — получить недвижимость имена, связанные с ключом. Например, чтобы увидеть имена записей в разделе реестра 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
  
  PSPath: Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SO
                      ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ\Microsoft\Windows\CurrentVersion
PSParentPath: Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SO
                      ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ\Майкрософт\Виндовс
PSChildName : Текущая Версия
PSДиск: HKLM
PSProvider : Microsoft.PowerShell.Core\Registry
Путь устройства: C:\WINDOWS\inf
MediaPathUnexpanded: C:\WINDOWS\Media
ProgramFilesDir : C:\Program Files
CommonFilesDir: C:\Program Files\Common Files
Идентификатор продукта: 76487-338-1167776-22465
WallPaperDir : C:\WINDOWS\Web\Wallpaper
МедиаПуть: C:\WINDOWS\Media
Путь к ProgramFiles: C:\Program Files
PF_AccessoriesName : Аксессуары
(По умолчанию)           :
  

Все свойства ключа, связанные с 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 ..\Справка .

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

Если вы хотите получить определенную запись в разделе реестра, вы можете использовать один из нескольких возможных подходит. В этом примере выполняется поиск значения DevicePath в HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion .

С помощью Get-ItemProperty используйте параметр Path , чтобы указать имя ключа и Параметр Name для указания имени записи DevicePath .

  Get-ItemProperty -Path HKLM:\Software\Microsoft\Windows\CurrentVersion -Name DevicePath
  
  PSPath: Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\Software\
               Microsoft\Windows\CurrentVersion
PSParentPath: Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\Software\
               Майкрософт Виндоус
PSChildName : Текущая Версия
PSДиск: HKLM
PSProvider : Microsoft.PowerShell.Core\Registry
Путь устройства: C:\WINDOWS\inf
  

Эта команда возвращает стандартные свойства Windows PowerShell, а также DevicePath имущество.

Примечание

Хотя Get-ItemProperty имеет параметры Filter , Include и Exclude , они не могут использоваться для фильтрации по имени свойства. Эти параметры относятся к разделам реестра, которые являются элементом пути, а не записи реестра, которые являются свойствами элемента.

Другой вариант — использовать инструмент командной строки Reg.exe. Чтобы получить справку по 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 . Запись Path указывает, где найти исполняемые файлы.

  1. Получить текущее значение записи Path с помощью Get-ItemProperty .
  2. Добавьте новое значение, разделив его ; .
  3. Используйте 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 /? в командной строке.

В следующем примере запись Path изменяется путем удаления пути, добавленного в приведенном выше примере. Get-ItemProperty по-прежнему используется для получения текущего значения, чтобы избежать разбора строки. возвращено из reg запроса .Методы SubString и LastIndexOf используются для извлечения последний путь добавлен в запись Path .

  $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 . из следующей таблицы:

Тип свойства Значение Значение
Двоичный Двоичные данные
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 .

Переименование записей реестра

Чтобы переименовать запись 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

Администраторы могут выполнять все типичные операции с реестром, используя либо старый добрый пользовательский интерфейс Regedit, либо файл reg.exe-утилита. Но есть и другой вариант — Windows PowerShell. PowerShell предоставляет большой набор инструментов для взаимодействия с реестром Microsoft Windows как на локальном компьютере, так и удаленно.

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

Локальное получение значений ключей реестра с помощью PowerShell

Чтобы получить значения всех ключей реестра на локальной машине, нам сначала нужно найти путь к реестру.Получим список всех локальных дисков:

 получить-psdrive 

Как видите, в реестре есть две записи: HKEY_CURRENT_USER (HKCU) и HKEY_LOCAL_MACHINE (HKLM). Это две логические группы ключей или «кулей» в реестре.

Таким образом, мы можем перейти к корневому ключу реестра локального компьютера, выполнив следующую команду:

 компакт-диск HKLM:\ 

Кроме того, мы можем установить наше текущее рабочее местоположение на определенный путь в реестре с помощью командлета Set-Location :

 set-location -path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\ 

Затем мы можем использовать командлет Get-ChildItem для вывода всех ключей реестра в текущем кусте с их свойствами:

 Получить дочерний элемент 

Чтобы получить параметры для определенного ключа (например, ключа Run), мы будем использовать командлет Get-Item , указав путь:

 Get-Item -path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Run 

Удаленное получение значений ключей реестра с помощью PowerShell

PowerShell позволяет удаленно подключаться к реестру компьютера и просматривать его с помощью WinRM.Для этого вам нужно использовать командлет Invoke-Command :

 Invoke-Command –ComputerName dc1 –ScriptBlock { Get-ItemProperty -Path 'HKCU:\Software\System' -Name WorkingDirectory} 

Удаленное редактирование реестра с помощью PowerShell

Для удаленного редактирования реестра нам сначала нужно подключиться к нему с помощью командлета Enter-PSSession :

 Enter-PSSession pdc -Credential Enterprise\T.Simpson 

Система запросит у вас пароль для указанной вами учетной записи пользователя.После аутентификации вы сможете использовать команды PowerShell на удаленном компьютере.

Поиск в реестре с помощью PowerShell

Чтобы найти определенные ключи в реестре, используйте сценарий, подобный следующему, который ищет в реестре ключи, в названии которых содержится «Netwrix»:

 get-childitem -path hkcu:\ -recurse -ErrorAction SilentlyContinue | Where-Object {$_.Name -like "*Netwrix*"} 

Редактирование реестра с помощью PowerShell

Если мы хотим изменить один из параметров раздела реестра, нам нужно использовать командлет Set-ItemProperty .Например, мы могли бы использовать следующую команду, чтобы установить новое строковое значение для параметра «VMware User Process» клавиши «Run»:

 Set-Itempproperty -path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Run' -Name 'VMware User Process' -value 'C:\Program Files\VMware\VMware Tools\vmtoolsd.exe' 

Создание раздела реестра с помощью PowerShell

Чтобы добавить ключ в реестр, нам нужно использовать командлет New-Item . Давайте создадим новый ключ с именем «NetwrixKey» в кусте KEY_CURRENT_USER:

.
 Новый элемент – Путь «HKCU:\dummy» – Имя NetwrixKey 

А теперь давайте создадим параметр с именем «NetwrixParam» для нашего нового ключа и установим его значение в строку «NetwrixValue»:

 New-ItemProperty -Path "HKCU:\dummy\NetwrixKey" -Name "NetwrixParam" -Value ”NetwrixValue”  -PropertyType "String" 

Посмотрим в реестре:

Удаление ключа реестра или параметра с помощью PowerShell

Теперь давайте удалим только что созданный параметр «NetwrixKey» с помощью командлета Remove-ItemProperty :

 Remove-ItemProperty -Path "HKCU:\dummy\NetwrixKey" -Name "NetwrixParam" 

А затем удалим сам ключ «NetwrixKey»:

 Remove-Item -Path "HKCU:\dummy\NetwrixKey" -Recurse 

Параметр –Recurse разрешает PowerShell удалять все подразделы без дополнительного подтверждения (разумеется, в этом примере мы не создавали никаких подразделов).

Если вы хотите удалить все подразделы внутри указанного ключа, не удаляя сам ключ, вы должны добавить символ «*» в конце пути:

 Remove-Item -Path "HKCU:\dummy\NetwrixKey\*" -Recurse 

Переименование раздела реестра или параметра с помощью PowerShell

Чтобы переименовать раздел реестра, используйте командлет Rename-Item :

 Rename-Item -Path "HKCU:\dummy\NetwrixKey" NetwrixNewKey 

Чтобы переименовать параметр раздела реестра, используйте командлет Rename –ItemProperty :

 Rename-ItemProperty -Path "HKCU:\dummy\NetwrixKey" -Name "NetwrixParam" -NewName "NetwrixNewParam" 

Заключение

Теперь вы знаете основные возможности Microsoft Windows PowerShell по управлению реестром.Как видите, управлять ключами реестра довольно легко и быстро, но помните, что даже одно небольшое изменение может привести вашу операционную систему к синему экрану смерти.

Поэтому, прежде чем вносить какие-либо изменения в реестр, вы должны быть на 100% уверены в том, что вы меняете, иметь актуальные резервные копии вашей системы и данных и отслеживать все вносимые вами изменения. Netwrix Auditor для Windows Server может помочь; он отслеживает, сообщает и предупреждает об изменениях в реестре Windows.

Джефф — бывший директор по разработке глобальных решений в Netwrix.Он давний блогер Netwrix, спикер и ведущий. В блоге Netwrix Джефф делится лайфхаками, советами и рекомендациями, которые могут значительно улучшить ваш опыт системного администрирования.

Как использовать PowerShell для изменения и обновления реестра

Реестр Windows сложен, и с ним может быть трудно работать. Используя PowerShell, мы можем использовать множество различных способов взаимодействия и работы с реестром и значительно упростить управление системой.PowerShell видит реестр через поставщика реестра PSDrive. Это означает, что вы можете просматривать реестр и взаимодействовать с ним так же, как с обычной файловой системой. Существуют важные различия во взаимодействии с ключами и записями реестра, о которых вам необходимо знать при работе с реестром в PowerShell. Читайте дальше, чтобы узнать, как!

Список ключей реестра

Есть несколько поставщиков, доступных через PowerShell. Мы можем перечислить все корни, доступные для Registry PSProvider, чтобы увидеть точки входа.

  Get-PSDrive -PSProvider 'Реестр' | Select-Object -Имя свойства, корень  

Доступны только два: куст текущего пользователя и куст локального компьютера. Те, кто знаком с regedit.exe , могут заметить, что там доступно больше файлов, чем показано здесь.

  • HKEY_CLASSES_ROOT — это объединенное представление для подраздела Software\\Classes в кустах текущего пользователя и локального компьютера. Поэтому вы можете изменить эти значения, обратившись к соответствующему местоположению в уже открытых местах.
  • HKEY_USERS — это ярлык для загруженных кустов HKEY_CURRENT_USER для загруженных пользователей. Улей для пользователя недоступен, если он не используется в данный момент. Поэтому здесь доступны несколько разных SID, но не для пользователей, которые не вошли в систему. В этой ситуации вам придется вручную загрузить куст.
  • HKEY_CURRENT_CONFIG — это ярлык для ключа HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Hardware Profiles\\Current\\ , который используется в основном для удобства.

Имея все это в виду, как нам составить список разделов реестра? Используя для примера нашего текущего пользователя, мы можем просто получить список с помощью команды Get-ChildItem .

 Get-ChildItem -Path 'HKCU:\Printers' 

Вы можете видеть, что мы обращаемся к этому через ярлык PSDrive HKCU . Вы можете быстро заметить, что существует свойство , которое обычно не существует при использовании Get-ChildItem  в контексте файла.Это связано с тем, что каждый ключ в реестре рассматривается как контейнер, а те, у которых есть только подразделы, такие как ключ Connections , не будут отображать никаких свойств, иначе они будут перечислены. Вы можете увидеть это на практике, рекурсив раздел реестра и просмотрев подразделы и их свойства.

  Get-ChildItem -Path 'HKCU:\Printers' -Recurse -Depth 1  

Теперь, когда мы знаем, как составить список разделов реестра и их свойств, как на самом деле создать раздел реестра? Читайте дальше, чтобы узнать, как это сделать!

Создание нового ключа реестра

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

 Путь к новому элементу 'HKCU:\MyKey' 

Теперь, когда у нас есть ключ контейнера, давайте добавим записи реестра с помощью команды New-ItemProperty .

 New-ItemProperty -Path 'HKCU:\MyKey' -Name 'Property1' -Value 'Value1'  

Подождите секунду, если мы запустим Get-ChildItem -Path 'HKCU:\\MyKey , ничего не будет возвращено! Это связано с тем, что без подразделов ключ действует как контейнер только со свойствами.Когда вы специально обращаетесь к ключу таким образом, вы получаете подразделы. Чтобы убедиться, что мы создали наш ключ и доступные значения, используйте Get-ItemProperty .

  Get-ItemProperty -Path 'HKCU:\MyKey'  

Последнее замечание: существует несколько различных типов значений реестра, таких как MultiString , Binary , DWord , QWord , String или ExpandString . Их можно использовать в New-ItemProperty и PropertyType для создания эквивалентных типов в реестре.Ниже показаны примеры каждого из них на практике.

  New-ItemProperty -Path 'HKCU:\\MyKey' -PropertyType 'String' -Name 'String' -Value 'Это строка!'
New-ItemProperty -Path 'HKCU:\\MyKey' -PropertyType 'ExpandString' -Name 'ExpandedString' -Value '"Расширенная строка" "%windir%"'
New-ItemProperty -Path 'HKCU:\\MyKey' -PropertyType 'MultiString' -Name 'MultiString' -Value @('Value1','Value2','Value3')
New-ItemProperty -Path 'HKCU:\\MyKey' -PropertyType 'DWord' -Name 'DWord' -Value 1
New-ItemProperty -Path 'HKCU:\\MyKey' -PropertyType 'QWord' -Name 'QWord' -Value 1
New-ItemProperty -Path 'HKCU:\\MyKey' -PropertyType 'Binary' -Name 'Binary' -Value ([byte[]](0x30,0x31,0xFF))  

Вы могли заметить, что значение %windir% расширяется до C:\\WIDOWS при доступе к свойству.Это расширенная строка в действии!

Читайте дальше, чтобы узнать, как изменять записи реестра!

Изменение ключа реестра и записи

Теперь, когда мы создали раздел реестра, как нам его изменить? Используя команды Set-Item и Set-ItemProperty, мы можем изменить наши ключи и записи по мере необходимости. Во-первых, давайте изменим значение Property1.

 Set-ItemProperty -Path 'HKCU:\MyKey' -Name 'Property1' -Value 'Измененное значение'  

Как показано выше, мы изменили значение Property1 .Это так просто! Конечно, есть несколько полезных вещей, которые нужно знать при работе со значениями. Существует специальный ключ, который является ключом (по умолчанию) данного раздела реестра. Чтобы изменить это, проще всего использовать Set-Item , как показано ниже.

  Set-Item -Path 'HKCU:\MyKey' -Value 'Default Changed'  

Читайте дальше, чтобы узнать, как удалить ключ реестра, когда вам нужно очистить все эти лишние ключи!

Удаление ключа реестра

Наконец, нам нужно удалить созданные нами ключи.Вы можете удалить одну запись реестра или весь ключ. Для этого мы можем использовать команды Remove-ItemProperty или Remove-Item. Во-первых, давайте удалим одно свойство, используя Remove-ItemProperty, как показано ниже.

  Remove-ItemProperty -Path 'HKCU:\MyKey' -Name 'ExpandedString'
  

Конечно, мы можем просто решить удалить весь ключ и все подразделы. Для этого мы можем использовать Remove-Item , как показано ниже.

  Remove-Item -Path 'HKCU:\\MyKey' -Recurse
  

Заключение

Работать с реестром в PowerShell легко, если понять особенности провайдера.PowerShell намного проще, чем старые инструменты командной строки Windows, и легко интегрируется в сценарии и функции. Он идеально подходит для манипулирования, создания и удаления разделов и записей реестра!

Как использовать PowerShell для получения значения реестра (диски PS и .NET)

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

Поехали!

Предпосылки

Все примеры в этой статье будут продемонстрированы с использованием PowerShell 7.1, которая на момент публикации этой статьи является последней версией. Вы также можете использовать Windows PowerShell 5.1, если хотите. Вы также должны иметь некоторое базовое представление о PowerShell Drives.

Некоторые примеры могут не работать без прав администратора.

Получение ключей и значений реестра с помощью

Get-ChildItem

Один из самых простых способов найти разделы и значения реестра — использовать командлет Get-ChildItem .Этот командлет PowerShell получает значения реестра и многое другое путем перечисления элементов на дисках PowerShell. В этом случае этот диск PowerShell — это диск HKLM, найденный при запуске Get-PSDrive .

Запустите следующую команду в консоли PowerShell.

  Get-ChildItem -Path 'HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\'
  

На скриншоте ниже вы можете увидеть:

  1. Полный путь к разделу реестра WindowsUpdate
  2. Ключ AU
  3. Список записей реестра в разделе AU с соответствующими значениями
Получение значений реестра для Центра обновления Windows

Одно небольшое замечание относительно приведенного выше снимка экрана.Вы можете заметить, что вывод немного вводит в заблуждение. Обычно выходные данные консоли PowerShell представляют свойства объекта. Get-ChildItem в этом случае ведет себя по-другому, поскольку этот объект технически не имеет свойств. Дополнительные команды запускаются в фоновом режиме для форматирования отображения, которое вы видите.

Связано: Как проверить наличие ожидающей перезагрузки в реестре Windows

Получение значений реестра с помощью

Get-ItemProperty

Продолжая использовать тот же раздел реестра, что и раньше, давайте на этот раз воспользуемся командлетом Get-ItemProperty и сделаем вывод более читаемым.

Использование Get-ItemProperty лучше всего подходит для получения ключей и значений свойств элемента в реестре. Запустите команду ниже:

  Get-ItemProperty -Path 'HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU'
  

На скриншоте ниже вы видите список ключей и значений:

  1. Для контейнера реестра AU
  2. Свойства, связанные с PowerShell, которые начинаются с PS
Использование Get-ItemProperty для получения значений реестра

В качестве альтернативы вы также можете указать путь к элементу реестра, чтобы получить тот же вывод, но немного быстрее, используя .СЕТЬ. Приведенная ниже команда использует класс реестра .NET для получения значения реестра:

.
  Get-ItemProperty -Path Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU
  

Получение значений реестра с помощью

Get-ItemPropertyValue

Теперь пришло время взглянуть на ключевые значения. Используя командлет Get-ItemPropertyValue с тем же контейнером реестра, что и раньше, давайте посмотрим на значение ключа NoAutoUpdate .Выполните следующую команду PowerShell:

.
  Get-ItemPropertyValue -Path 'HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU\' -Name NoAutoUpdate
  

Используя Get-ItemPropertyValue , вы получите более краткий вывод, показывающий только значение, а не какую-либо другую информацию, которую вы видели ранее.

Ключ NoAutoUpdate и соответствующее значение

Запрос реестра без дисков PS

На протяжении всего этого руководства вы использовали диски PowerShell для работы с реестром.Делать это таким образом — не единственный способ; вы также можете использовать .NET и получать информацию о реестре через классы .NET!

Например, возможно, вам нужно использовать PowerShell для получения значения реестра HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU\ : AutoUpate на удаленном компьютере.

Вы можете сделать это с помощью .NET:

  1. Открытие подключения к реестру на удаленном компьютере.
  $Registry = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalMachine', $Computername)  

2.Открытие определенного ключа реестра, который вы ищете.

  $RegistryKey = $Registry.OpenSubKey("ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ\Policies\Microsoft\Windows\WindowsUpdate\AU", $true)  

3. Использование метода GetValue() для запроса значения значения реестра внутри раздела реестра.

  $RegistryKey.GetValue('AU')  

Использование дисков .NET вместо дисков PowerShell немного быстрее и является простым способом подключения и использования PowerShell для запроса ключей и значений реестра на удаленных компьютерах.

Проверка значений реестра с помощью

Test-Path

Иногда нужно просто проверить наличие значения реестра. Это можно сделать с помощью командлета Test-Path .

Продолжая работу с контейнером WindowsUpdate, проверьте, присутствует ли контейнер AU, выполнив следующую команду PowerShell:

  Test-Path -Path 'HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU'
  

Если результат равен True , ключ или контейнер существует.Но что, если вам нужно проверить значение или запись существует? Давайте создадим пользовательскую функцию для этого теста:

  Функция Test-RegistryValue ($regkey, $name) {
     if (Get-ItemProperty -Path $regkey -Name $name -ErrorAction Ignore) {
         $правда
     } еще {
         $ложь
     }
 }  

Используя пользовательскую функцию, вы вводите путь и имя ключа или контейнера, а также искомое значение, и пользовательская функция возвращает True или False (3), как показано на снимке экрана ниже:

Введите ключ и значение для проверки и возврата True или False

Следующие шаги

Знайте, что вы можете использовать Get-ChildItem , Get-ItemProperty и Get-ItemPropertyValue для получения ключей реестра и их значений, что еще вы можете сделать?

Если вы хотите узнать больше о работе с реестром с помощью PowerShell, ознакомьтесь со статьей Microsoft Docs под названием «Работа с ключами реестра» .Вы также можете найти отличную демонстрацию установки значений реестра в сообщении блога ATA Использование Active Setup: как установить значение реестра в кустах всех пользователей.

Взаимодействие с реестром в PowerShell

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

Последние сообщения Тимоти Уорнера (посмотреть все)

Как системные администраторы Windows, мы очень хорошо знакомы с реестром Windows.

Как я уже сказал, Windows PowerShell предоставляет два основных поддерева реестра (HKEY_CURRENT_USER и HKEY_LOCAL_MACHINE) через встроенного поставщика.

 PS C:\> Get-PSDrive -Реестр PSProvider | Select-Object -Имя свойства, корень

Корень имени
---- ----
HKCU HKEY_CURRENT_USER
HKLM HKEY_LOCAL_MACHINE 

Допустим, мы хотим просмотреть содержимое клавиши «Выполнить» в нашей Windows 8.1 система. Конечно, нам уже удобно проверять этот путь, чтобы найти проблемные и/или нежелательные программы автозапуска, верно?

Во-первых, мы переместим нашего провайдера из файловой системы по умолчанию в реестр, перейдя по правильному пути, например:

 Set-Location -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Run 

странно, когда мы пытаемся получить список «каталогов» на клавишу «Выполнить»:

 PS HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Run> Get-ChildItem
PS HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Run> 

Странно, особенно если учесть, что у меня действительно есть запись в этом ключе.Например:

Проверка наличия данных в нашем разделе реестра Run

Те из вас, кто ранее работал с поставщиками данных PowerShell, могут быть знакомы с Get-Item для получения данных на уровне объекта. Что касается поставщика реестра, ключи реестра являются элементами, а значения — свойствами элементов. Попробуйте это:

 Get-Item .


    Куст: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion


Имя Свойство
---- --------
Запустите пользовательский процесс VMware: «C:\Program
                               Файлы\VMware\VMware Tools\vmtoolsd.exe"-n
                                                     vmusr 

Точка (.) важна, поскольку Get-Item использует –Path в качестве обязательного параметра первой позиции, а точка исторически представляет текущий рабочий каталог в оболочках Cmd.exe, PowerShell и Bash.

Чтобы просмотреть значения ключа «Выполнить», нам потребуется Get-ItemProperty :

 Get-ItemProperty .

Пользовательский процесс VMware: «C:\Program Files\VMware\VMware Tools\vmtoolsd.exe" -nvmusr
PSPath: Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
PSParentPath: Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion
PSChildName : Выполнить
PSДиск: HKLM
PSProvider : Microsoft.PowerShell.Core\Registry 

Создав переменную, в которой хранится ключ реестра, мы можем легко использовать «точечную нотацию» для доступа ко всем значениям. Проверьте это:

 $desktop = Get-ItemProperty –Path "HKCU:\Control Panel\Desktop" 

Теперь используйте завершение табуляции с $desktop; вы можете быстро прочитать любое значение, которое вам нужно.

До появления Windows 8 я обычно регулировал значение MenuShowDelay в HKCU\Control Panel\Desktop, чтобы меню «Пуск» открывалось быстрее. Я уверен, что мы можем снова настроить это значение в Windows 10, но сейчас я буду использовать это в качестве примера, чтобы научить вас, как изменять значения реестра с помощью Windows PowerShell.

Допустим, мы хотим изменить значение MenuShowDelay с его текущего значения на 50. Сначала мы проверяем его текущее значение, например:

 Get-ItemProperty -Path "HKCU:\Control Panel\Desktop" -Name MenuShowDelay
MenuShowDelay : 400 

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

Теперь я хочу научить вас, как программно добавлять новые данные в реестр с помощью PowerShell. В этом примере мы создадим новый ключ с именем MyKey и новое значение DWORD с именем MyValue. HKCU\Control Panel\Desktop — довольно безобидный путь, поэтому давайте сохраним его в переменной для начала:

 $path = "HKCU:\Control Panel\Desktop" 

Теперь мы создадим новый ключ, вызвав Новый элемент :

 Новый элемент –Путь $путь –Имя MyKey
Затем пришло время создать значение MyValue:
New-ItemProperty -Path $path\MyKey -Name "MyValue" -Value 0 -PropertyType "DWORD" 

Наши новые данные реестра

Мы закончим удалением нашего нового ключа и значения.Для этого вызовем Remove-ItemProperty :

 Remove-ItemProperty –Path $path\MyKey –Name «MyValue» 

Наконец, мы удалим ключ реестра MyKey с помощью Remove-Item :

 Remove-Item –Path $path\MyKey -Recurse 

В предыдущем примере параметр –Recurse удаляет все подразделы, которые могут существовать под целевым ключом.

Вот и все (по крайней мере, для начала). Я надеюсь, что вы нашли эту статью информативной.

Получение значения ключа реестра с помощью PowerShell

  1. Что такое ключ реестра
  2. Резервное копирование ключей реестра в PowerShell
  3. Получение значения ключа реестра с помощью Get-ItemProperty Получение командлета 90 в PowerShell 9004 раздела реестра с помощью командлета Get-ItemPropertyValue в PowerShell

В некоторых случаях для исправления ошибок, настройки функций Windows или полного удаления программного обеспечения или продукта требуется отредактировать реестр Windows.

Хотя использование редактора реестра может быть удобным, ошибка все же может возникнуть, если мы недостаточно осторожны. Редактирование реестра очень деликатно, и от него зависит ваша локальная система.

В этой статье показано, как безопасно получить значения раздела реестра с помощью Windows PowerShell.

Что такое ключ реестра

Раздел реестра можно рассматривать как структурированную папку с файлами, но он существует только в реестре Windows.

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

Как уже упоминалось, реестр Windows структурирован, причем самые верхние разделы реестра называются кустами реестра. Они считаются специальными разделами реестра с особыми разрешениями, но они по-прежнему выполняют ту же важную функцию, что и стандартный раздел реестра.

  HKEY_LOCAL_MACHINE\ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ\Майкрософт
  

Если взять приведенный выше пример, HKEY_LOCAL_MACHINE или HKLM для краткости — это начало пути реестра.Ключ реестра SOFTWARE затем следует за ним, и, как уже упоминалось, ключи реестра могут содержать больше ключей, которые мы называем подразделами, такими как Microsoft .

Резервное копирование ключей реестра в PowerShell

Целесообразно сделать резервную копию нашего реестра, прежде чем вносить какие-либо изменения. Как уже упоминалось, любое случайное изменение в реестре может привести к ошибке в ваших файлах, программном обеспечении или, что еще хуже, во всей операционной системе.

Однако, имея копию ключей, которые вы меняете, вы можете чувствовать себя комфортно, зная, что можете отменить любые изменения, которые могут привести к проблемам в вашей операционной системе.

Мы можем использовать устаревшие команды reg export для быстрого резервного копирования реестра. Например, приведенный ниже синтаксис создаст резервную копию всего реестра HKLM .

  reg экспорт HKLM C:\RegBack\HKLM.Reg /y
  

Ваши резервные копии ключей реестра будут экспортированы в файл формата .REG . Таким образом, вы можете быстро восстановить резервные копии ключей реестра, дважды щелкнув файл реестра и следуя инструкциям.

Получение значения ключа реестра с помощью командлета

Get-ItemProperty в PowerShell

Командлет Get-ItemProperty — это командлет PowerShell, используемый для возврата записей реестра в более читаемом формате, чем его родственная команда Get-Item .Мы также можем получить значение определенного раздела реестра с помощью командлета Get-ItemProperty .

Пример кода:

  $registryPath = "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion"

Get-ItemProperty -Path $registryPath -Name ProgramFilesDir
  

Вывод:

  ProgramFilesDir : C:\Program Files
PSPath: Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Micr
                  osoft\Windows\CurrentVersion
PSParentPath: Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Micr
                  osoft\виндовс
PSChildName : Текущая Версия
PSДиск: HKLM
PSProvider : Microsoft.PowerShell.Core\Registry
  

Примечание. Не забудьте заключить путь реестра в двойные кавычки ( "" ), так как в некоторых путях реестра есть пробелы. Заключение пути в двойные кавычки приведет к буквальному выражению указанного пути и не приведет к ошибке.

Команда создает объект PSCustomObject с PsPath , PsParentPath , PsChildname , PSDrive , PSProvider 90

Итак, чтобы вывести только фактическое значение ключа реестра, мы можем вызвать в нашем скрипте свойство имени значения ключа.

Пример кода:

  $registryPath = "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion"

$keyValue = Get-ItemProperty -Path $registryPath -Name ProgramFilesDir

$keyValue.ProgramFilesDir
  

Вывод:

  C:\Program Files
  

Команда Get-ItemProperty работает с Powershell версий 2–5.Однако в Windows PowerShell 5 Microsoft представила новый командлет, значительно упрощающий вывод ключей реестра из командной строки.

Получение значения ключа реестра с помощью командлета

Get-ItemPropertyValue в PowerShell

Как уже упоминалось, командлет Get-ItemPropertyValue введен в Windows PowerShell версии 5 для решения запроса на получение значения ключей реестра в намного короче и проще.

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

Пример кода:

  Get-ItemPropertyValue 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion' 'ProgramFilesDir'
  

Вывод:

  C:\Program Files
  

Напишите нам

Статьи DelftStack написаны такими же фанатами программного обеспечения, как и вы.

Добавить комментарий

Ваш адрес email не будет опубликован.