【问题标题】:Powershell - transform fully qualified paths into PS drive-based paths using string replacementPowershell - 使用字符串替换将完全限定的路径转换为基于 PS 驱动器的路径
【发布时间】:2018-04-20 01:54:07
【问题描述】:

我有这个代码可以找到一个名为“c02ebc5353d9cd11975200aa004ae40e”的注册表项。这完美地工作。但是,该变量还具有 Microsoft.PowerShell.Core\Registry::HKEY_CURRENT_USER\Software\Microsoft\Office..path 以在完成时找到密钥。如何删除 Microsoft.powershell.core\Registry:: 部分?

$path = ls 'HKCU:\' -Recurse | where { $_.Name -like 
 '*c02ebc5353d9cd11975200aa004ae40e*' } | Select PSParentPath | ft -AutoSize -Wrap

我查看了对如下变量使用 .replace 函数:

$path.replace ("Microsoft.PowerShell.Core\Registry::HKEY_CURRENT_USER", "HKU:")

我收到此错误:[Microsoft.PowerShell.Commands.Internal.Format.FormatStartData] does not contain a method named 'replace'.。但如果我对普通变量执行此操作,.replace 部分工作正常

任何帮助表示赞赏。

【问题讨论】:

    标签: powershell replace path registry


    【解决方案1】:
    • 格式化 cmdlet,例如 ft (Format-Table) 仅用于显示数据 - 不要使用它们作为数据的输出用于后续处理

      • 从您的第一个命令中删除 | ft -AutoSize -Wrap
      • 因为ft产生了[Microsoft.PowerShell.Commands.Internal.Format.FormatStartData]等类型的输出对象,没有.Replace()方法,你的调用失败了。
    • 您正在寻找[string]-type .Replace() 方法,但即使没有ft 调用,Select PSParentPath 也不会输出字符串,而是具有.PSParentPath 属性 和所需值的包装对象。要仅输出值,请使用 -ExpandProperty:

      • 使用Select -ExpandProperty PSParentPath 跳过包装对象并直接将.PSParentPath 值输出为字符串

    将它们放在一起(使用Get-ChildItem 代替别名ls,并使用Where-Object 代替别名where):

    $path = Get-ChildItem HKCU:\ -Recurse | Where-Object {
      $_.Name -like '*c02ebc5353d9cd11975200aa004ae40e*' 
    } | Select -ExpandProperty PSParentPath
    
    $path.Replace("Microsoft.PowerShell.Core\Registry::HKEY_CURRENT_USER", "HKCU:")
    

    这是一个简化的替代解决方案

    • 假设仅将通配符模式应用于注册表项 names 就足够了(.Name 属性实际上报告了完整的键 path),这种情况下可以使用Get-ChildItem-Include参数。

    • 使用 PowerShell 的 -replace 运算符,它与 .Replace() 字符串方法不同,它对 正则表达式进行操作,它启用更多功能;在手的情况下,它允许将匹配锚定在字符串^ 的开头(但相反需要转义正则表达式元字符。例如.\\)。

    (Get-ChildItem HKCU:\ -Recurse -Include *c02ebc5353d9cd11975200aa004ae40e*)
     .PSParentPath -replace '^Microsoft\.PowerShell\.Core\\Registry::HKEY_CURRENT_USER', 'HKCU:' 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-20
      • 2011-01-10
      • 1970-01-01
      • 2010-10-08
      • 2022-08-17
      • 2012-11-23
      • 2023-03-20
      • 1970-01-01
      相关资源
      最近更新 更多