Получить информацию из раздела реестра с помощью 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

Другие вопросы по тегам