如何移除PowerShell注册表路径中的Microsoft.PowerShell.Core\Registry::前缀
嘿,我来帮你搞定这个注册表路径前缀的问题!
首先得指出你当前代码里的一个小坑:你用了ft -AutoSize -Wrap(也就是Format-Table),这玩意儿是用来把输出变成好看的表格给人看的,不是用来获取可处理的数据的——它会把结果转换成格式化对象,而不是纯字符串,这会导致后续的replace操作根本没法正常工作。
先给你修正原始代码,改成能拿到纯路径字符串的版本:
$fullPath = Get-ChildItem 'HKCU:\' -Recurse | Where-Object { $_.Name -like '*c02ebc5353d9cd11975200aa004ae40e*' } | Select-Object -ExpandProperty PSParentPath
这里用-ExpandProperty直接提取PSParentPath的字符串值,而不是保留对象结构。
接下来给你三种去掉前缀的方法,按需选就行:
方法1:最稳妥的字面量替换
因为Microsoft.PowerShell.Core\Registry::是固定的前缀,直接用Replace()方法做字面量替换就好,不用考虑正则转义的麻烦:
$cleanPath = $fullPath.Replace('Microsoft.PowerShell.Core\Registry::', '')
方法2:正则精准匹配替换
如果你想用正则确保只替换开头的前缀(避免误替换路径中间可能出现的相同片段),可以这么写:
$cleanPath = $fullPath -replace '^Microsoft\.PowerShell\.Core\\Registry::', ''
这里的^表示只匹配字符串开头的内容,转义.和\是因为它们在正则里是特殊字符。
方法3:直接跳过前缀,一步到位
其实你完全可以绕开处理前缀的步骤!PowerShell里每个注册表项对象的Name属性本身就是不带PowerShell Provider前缀的纯注册表路径,比如HKEY_CURRENT_USER\Software\...这种格式。直接改代码获取Name属性就行:
$cleanPath = Get-ChildItem 'HKCU:\' -Recurse | Where-Object { $_.Name -like '*c02ebc5353d9cd11975200aa004ae40e*' } | Select-Object -ExpandProperty Name
这样拿到的结果直接就是你想要的格式,省掉后续替换的步骤,更高效!
内容的提问来源于stack exchange,提问作者user3290171
相关产品推荐
相关产品推荐

