Получить информацию из раздела реестра с помощью PowerShell
Я использую PowerShell для чтения информации из раздела реестра.
Get-ItemProperty -Path "HKEY_CURRENT_USER\Software\Microsoft\Windows\Shell\Associations\UrlAssociations\http\UserChoice\" |% {$_.ProgId}
Это в основном, чтобы найти браузер по умолчанию на машине.
Тем не менее, я продолжаю сталкиваться с этой ошибкой. Я новичок в PowerShell, поэтому не уверен, что происходит.
Get-ItemProperty : Cannot find path 'C:\Users\muafzal\Documents\Files\HKEY_CURRENT_USER\Software\Microsoft\Windows\Shell\Associations\UrlAssociations\http\UserChoice\' because it does not exist.
At line:1 char:1
+ Get-ItemProperty -Path "HKEY_CURRENT_USER\Software\Microsoft\Windows\Shell\Assoc ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (C:\Users\muafza...ttp\UserChoice\:String) [Get-ItemProperty], ItemNotFoundException
+ FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetItemPropertyCommand
Есть ли другой способ получить данные (ProgId) из раздела реестра?
2 ответа
В powershell версии 5 вы можете использовать следующую команду, чтобы получить значение ProgId по этому пути в реестре.
Get-ItemPropertyValue -Path HKCU:\Software\Microsoft\Windows\Shell\Associations\UrlAssociations\http\UserChoice -Name ProgId
Разница между Get-ItemProperty и Get-ItemPropertyValue заключается в том, что последний возвращает только значение.
Путь, который вы использовали, был интерпретирован как местоположение файла, поскольку по умолчанию используется поставщик файловой системы. Поэтому, если вы хотите использовать реестр, вы должны использовать HKCU: для HKEY_CURRENT_USER и HKLM: для HKEY_LOCAL_MACHINE.
Если вы еще не на v5, вы можете использовать:
(Get-ItemProperty -Path HKCU:\Software\Microsoft\Windows\Shell\Associations\UrlAssociations\http\UserChoice).ProgId
Ваша текущая команда ссылается на файл в локальной файловой системе. Вам нужно использовать поставщика для куста реестра HKEY_CURRENT_USER (HKCU:
):
Get-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\Shell\Associations\UrlAssociations\http\UserChoice\" |% {$_.ProgId}
Что касается поставщика и различных обозначений, вы можете использовать одно из следующих обозначений:
Get-ItemProperty -Path Registry::"HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\Shell\Associations\UrlAssociations\http\UserChoice" -Name ProgId
ИЛИ
Get-ItemProperty -Path "HKLM:\Software\Microsoft\Windows\Shell\Associations\UrlAssociations\http\UserChoice" -Name ProgId
используя полную нотацию ROOT HKEY_LOCAL_MACHINE, вы должны указать поставщика (Registry::), используя короткую нотацию HKLM, вы можете избежать и должны быть HKLM:\
Примечание. Эти обозначения называются PSDrive в Powershell для реестра. 2 определены по умолчанию:
Get-PSDrive -PSProvider Registry
Выход:
Реестр HKCU HKEY_CURRENT_USER
Реестр HKLM HKEY_LOCAL_MACHINE
вы можете определить другой PSdrive
New-PSDrive -PSProvider Registry -Name HKU -Root HKEY_USERS
Get-PSDrive -PSProvider Registry
Реестр HKCU HKEY_CURRENT_USER Реестр
HKLM HKEY_LOCAL_MACHINE
Реестр HKU HKEY_USERS