如何检索原始的、未解析(未展开)的注册表值?



在"系统属性">"环境变量">"用户变量"中,PATH>包含:

%USERPROFILE%DownloadsSysinternalsSuite;%USERPROFILE%bin

可以使用以下命令检索该值:

PS C:srct> (Get-ItemProperty -Path HKCU:Environment).PATH
C:UserslitDownloadsSysinternalsSuite;C:Userslitbin

有没有办法在没有变量扩展的情况下获得原始值?似乎Get-ItemProperty需要一个-Raw开关。

PetSerAl,和以前很多次一样,在对这个问题的简短评论中提供了一个有效的解决方案。

实际上,PowerShell 的Get-ItemProperty/Get-ItemPropertyValuecmdlet 目前 (PowerShell 7.3.0(缺乏检索REG_EXPAND_SZ注册表值的原始值的能力,这意味着在嵌入式环境变量引用(例如,%USERPROFILE%(展开(插值(之前存储在注册表中的值。

因此,需要直接使用 .NET API:

(Get-Item -Path HKCU:Environment).GetValue(
'PATH',  # the registry-value name
$null,   # the default value to return if no such value exists.
'DoNotExpandEnvironmentNames' # the option that suppresses expansion
)

请参阅[Microsoft.Win32.RegistryKey].GetValue()

注意:PowerShell 会自动将'DoNotExpandEnvironmentNames'转换为[Microsoft.Win32.RegistryValueOptions]::DoNotExpandEnvironmentVariables;您也可以使用后者。

最新更新