Существует несколько способов ссылки на раздел реестра в PowerShell:
HKLM:\SOFTWARE\Wow6432Node
.HKEY_CLASSES_ROOT
.Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node
.Учитывая строку в одном из вышеуказанных форматов, как я могу эффективно получить «нормализованный» путь к ключу реестра (с расширенной частью куста, HKCU => HKEY_CURRENT_USER и т. д.)? Есть ли способ сделать это, не заморачиваясь с регулярными выражениями?
Используйте Convert-Path, чтобы преобразовать существующий путь реестра или любой другой путь в путь поставщика PowerShell (он же собственный путь, обычно в формате базового API ОС).
> Convert-Path HKLM:\SOFTWARE\Wow6432Node
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node
> $null = New-PSDrive -Name HKCR -Root HKEY_CLASSES_ROOT -PSProvider Registry
> Convert-Path HKCR:\Software
HKEY_CLASSES_ROOT\Software
> Convert-Path Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node
> Convert-Path HKLM:\DoesntExist
Convert-Path: Cannot find path 'HKLM:\DoesntExist' because it does not exist.
Если путь не существует, вы можете использовать такой код:
> $PSCmdlet.GetUnresolvedProviderPathFromPSPath('HKLM:\DoesntExist')
HKEY_LOCAL_MACHINE\DoesntExist
> $ExecutionContext.SessionState.Path.GetUnresolvedProviderPathFromPSPath('HKLM:\DoesntExist')
HKEY_LOCAL_MACHINE\DoesntExist
Именно то, что я искал, спасибо.