You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何移除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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 06:53:30