How do i get the value of a registry key and only the value using powershell
Harry Martyrossian mentions in a comment on his own answer that the
Get-ItemPropertyValue cmdlet was introduced in Powershell v5, which solves the problem:
PS> Get-ItemPropertyValue 'HKLM:SOFTWAREMicrosoftWindowsCurrentVersion' 'ProgramFilesDir'
C:Program Files
Alternatives for PowerShell v4-:
Here’s an attempt to retain the efficiency while eliminating the need for repetition of the value name, which, however, is still a little cumbersome:
& { (Get-ItemProperty `
-LiteralPath HKLM:SOFTWAREMicrosoftWindowsCurrentVersion `
-Name $args `
).$args } 'ProgramFilesDir'
By using a script block, the value name can be passed in once as a parameter, and the parameter variable ($args
) can then simply be used twice inside the block.
Alternatively, a simple helper function can ease the pain:
function Get-RegValue([String] $KeyPath, [String] $ValueName) {
(Get-ItemProperty -LiteralPath $KeyPath -Name $ValueName).$ValueName
}
Note: All solutions above bypass the problem described in Ian Kemp’s‘s answer – the need to use explicit quoting for certain value names when used as property names; e.g., .'15.0'
– because the value names are passed as parameters and property access happens via a variable; e.g., .$ValueName
As for the other answers:
Powershell реестр windows —
введение:
HKEY_LOCAL_MACHINE
HKEY_CLASSES_ROOT
HKEY_CURRENT_CONFIG
HKEY_CURRENT_USER
HKEY_USERS
Допустимые для создания элементы:
Команды ля работы с реестром:
Registry keys: powershell different from regedit
I’m getting different results when I interrogate my registry, depending on the method used. Why is this? Is it some 32-bit v 64-bit trickiness? How do I get the RegEdit answers via PowerShell?
Method 1 – RegEdit
If I browse to HKLMSOFTWARE in RegEdit.exe, I see a list of subkeys, starting with:
7-Zip
Alps
Method 2 – PowerShell
ForEach-Object{Get-ChildItem -Path 'HKLM:SOFTWARE'} | Select PSChildName
produces a list, starting with:
Adobe
ATI
Method 3 – reg query
Just for fun I tried a third method I discovered while hunting on Stack Overflow for an answer:
reg query hklmSOFTWARE
returns a list, starting with:
HKEY_LOCAL_MACHINESOFTWAREAdobe
HKEY_LOCAL_MACHINESOFTWAREATI
Как действует сценарий?
Сценарий Search-Registry.ps1 допускает возможность конвейерного ввода данных, поэтому в нем используются блоки сценария begin и process. Блок begin содержит код инициализации сценария: декларации глобальных переменных, средства проверки параметров и определения функций.
Блок сценария process последовательно перебирает все имена компьютеров, которые передаются сценарию, и передает очередное имя компьютера функции search-registry2. Последняя с помощью статического метода OpenRemoteBaseKey класса. NET Microsoft.Win32.
RegistryKey открывает ветвь реестра, запрошенную в командной строке, и затем передает имя каждого компьютера функции search-registrykey. Функция search-registrykey выполняет рекурсивный поиск шаблона регулярного выражения в разделе реестра (то есть она начинает поиск в указанном разделе и захватывает все подразделы данного раздела).
Как изменить значение параметра реестра
Чтобы изменить значение данного параметра, воспользуемся командлетом Set-ItemProperty:
Set-ItemProperty -Path ‘HKLM:SOFTWAREMicrosoftWindowsCurrentVersionDriverSearching’ -Name SearchOrderConfig -Value 0
Проверим, что значение изменилось:
Get-ItemProperty -Path ‘HKLM:SOFTWAREMicrosoftWindowsCurrentVersionDriverSearching’ -Name SearchOrderConfig
Как переименовать ключ или параметр
Для переименования параметра воспользуйтесь командой:
Rename-ItemProperty –path ‘HKCU:Control PanelDesktopNewKey’ –name “SuperParamString” –newname “OldParamString”Аналогично можно переименовать ветку реестра:
Rename-Item -path ‘HKCU:Control PanelDesktopNewKey’ OldKey
Как создать новый раздел (ключ) или параметр реестра
Для добавления новой ветки реестра, воспользуемся командой New-Item. Создадим новую ветку с именем NewKey:
$HKCU_Desktop= “HKCU:Control PanelDesktop”New-Item –Path $HKCU_Desktop –Name NewKeyДля созданной ветки добавим новый строковый параметр с именем SuperParamString и значением file_name.txt :
New-ItemProperty -Path $HKCU_DesktopNewKey -Name “SuperParamString” -Value ”file_name.txt” -PropertyType “String”
Убедитесь, что в реестре появился новый ключ и параметр.
Навигация в реестре с помощью powershell
Работа с реестром системы в PowerShell похожа на работу с обычными файлами на локальном диске.
Выведем список доступных дисков:
get-psdrive
Поиск в реестре без лишних хлопот
Листинг 1. Сценарий Search-Registry.ps1
Поиск в реестре с помощью powershell
PowerShell позволяет также выполнять поиск по реестру. Следующий скрипт выполняет поиск по ветке HKCU:Control PanelDesktop параметров, в имени которых содержится ключ dpi.
$Path = (Get-ItemProperty ‘HKCU:Control PanelDesktop’)$Path.PSObject.Properties | ForEach-Object {If($_.Name -like ‘*dpi*’){Write-Host $_.Name ‘ = ‘ $_.Value}}
Примеры команд
Рассмотрим несколько практических примеров, показывающих, как можно использовать сценарий Search-Registry.ps1. Не забывайте, что хотя на странице код может занимать несколько строк (это продиктовано размерами колонок текста), вам следует вводить его в окне PowerShell одной строкой.
Search-Registry -StartKey HKCR -Pattern "Word.Document.d» -MatchKey
Эта команда сканирует реестр локального компьютера, начиная с ветви HKEY_ CLASSES_ROOT, в поисках шаблона -Word.Document.d?. В регулярных выражениях точка (.) соответствует любому символу, обратная косая черта означает «следующий символ нужно воспринимать буквально».
Таким образом, -? означает -?. Обратная косая черта, стоящая перед буквой d (d), означает «любое десятичное число»; таким образом, данная операция поиска выявит подразделы реестра с именем Word.Document.n (где n — некое число). Если данная команда возвратит совпадение, это, по-видимому, будет означать, что в локальной системе имеется приложение, способное открывать документы Microsoft Word.
Удаление раздела или параметра реестра
Удалим созданный ранее параметр SuperParamString:
$HKCU_Desktop= “HKCU:Control PanelDesktop”Remove-ItemProperty –Path $HKCU_DesktopNewKey –Name “SuperParamString”
А затем удалим целиком ветку:
Remove-Item –Path $HKCU_DesktopNewKey –Recurse
Примечание. Ключ –Recurse говорит о том, что нужно рекурсивно без подтверждения удалить все вложенные подразделы
Для удаления всех элементов в ветке, но не самого раздела, команда будет такой:
Remove-Item –Path $HKCU_DesktopNewKey* –Recurse
Удаленный доступ к реестру с помощью powershell
PowerShell позволяеь получить доступ к реестру удаленного компьютера. К удаленном компьютеру можно подключится как через WinRM (Invoke-Command или Enter-PSSession):