PowerShell用Get-ChildItem查询注册表时如何仅提取键名而非全路径
问题解答
控制台输出的特殊逻辑
PowerShell内置了针对不同对象类型的默认格式化规则,规则定义在系统自带的*.format.ps1xml配置文件中。对于Microsoft.Win32.RegistryKey类型的注册表项对象,默认表格视图的Name列没有直接映射对象原生的Name属性,而是映射了PowerShell为所有Provider项统一附加的PSChildName属性,这个属性存储的就是当前项的纯名称,没有父路径前缀,也就是你看到的GUID键名。
而注册表项原生的Name属性设计上就是返回完整的注册表路径,所以直接调用才会得到带路径的结果。
直接获取纯键名的方法
不需要借助Split-Path、正则等额外处理,直接访问注册表项对象的PSChildName属性即可得到和控制台输出一致的纯GUID键名,示例代码如下:
$displayName = 'Parallels Tools' $key = 'Registry::HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall' $targetRegItem = Get-ChildItem -Path:$key | Where-Object {$_.GetValue('DisplayName') -eq $displayName} # 直接获取纯GUID键名 $pureGuidName = $targetRegItem.PSChildName
如果你需要同时拿到多个属性,可以用Select-Object显式指定别名映射,输出和控制台默认视图完全一致的结果:
Get-ChildItem -Path:$key | Where-Object {$_.GetValue('DisplayName') -eq $displayName} | Select-Object @{Name='Name';Expression={$_.PSChildName}}, Properties
内容的提问来源于stack exchange,提问作者Gordon
相关产品推荐
相关产品推荐

