关于Get-Item读取注册表项时Name属性表现异常的疑问
关于PowerShell中Get-Item注册表项显示差异的解答
这完全是PowerShell的预期行为,既不是Bug也不是操作错误——核心在于PowerShell的输出格式化逻辑和对象属性的区别,我给你拆解清楚:
- 直接执行
Get-Item "HKLM:\SOFTWARE\MozillaPlugins\@microsoft.com/GENUINE"时,PowerShell会自动根据返回的Microsoft.Win32.RegistryKey对象类型,调用对应的默认格式化视图。对于注册表项对象,这个默认视图只展示它的「短名称」,也就是你看到的@microsoft.com/GENUINE。 - 当你把命令结果赋值给变量
$test后,$test存储的是完整的注册表项对象。这个对象的Name属性本身就定义为完整的注册表路径,和默认输出的简化名称不是一回事。如果想拿到和直接执行时一样的短名称,你需要访问对象的PSChildName属性,而不是Name。
举个实际的代码例子验证一下:
$test = Get-Item "HKLM:\SOFTWARE\MozillaPlugins\@microsoft.com/GENUINE" # 输出短名称,和直接执行命令的结果一致 Write-Host $test.PSChildName # 输出完整路径,这是Name属性的固有值 Write-Host $test.Name
如果你想深入了解这个对象的所有属性,可以用Get-Member命令查看:
$test | Get-Member
执行后你会清晰看到Name(完整路径)和PSChildName(当前项名称)的属性定义差异。
内容的提问来源于stack exchange,提问作者Gordon
相关产品推荐
相关产品推荐

