【问题标题】:Remove text from powershell ouput从 powershell 输出中删除文本
【发布时间】:2020-05-13 22:36:27
【问题描述】:

我有这个命令:

Get-WmiObject win32_service |
  ? {$_.Name -like '*Front*'} |
    ? {$_.PathName -like '*logdir*'} |
      select Name, PathName

它的输出是这样的:

Frontapp (Frontapp1) D:\Application\Frontapp\Frontapp.exe -service  -dbType mssql -ORBSvcConf D:\Frontapp83\Frontapp\svc.conf -connections 5 -connectionPoolSize 64 -logdir D:\Frontapp\log1

Frontapp (Frontapp0) D:\Frontapp83\Frontapp\Frontapp.exe -service  -dbType ora -ORBSvcConf D:\Frontapp83\Frontapp\svc.conf -connections 35 -connectionPoolSize 64 -logdir D:\Frontapp\log0

如何从输出中删除信息,只为获取 -logdir 路径。

需要的输出:

Frontapp (Frontapp1) D:\Frontapp\log1

Frontapp (Frontapp0) D:\Frontapp\log0

【问题讨论】:

  • 顺便说一句:CIM cmdlet(例如,Get-CimInstance)取代了 PowerShell v3(2012 年 9 月发布)中的 WMI cmdlet(例如,Get-WmiObject)。因此,应该避免使用 WMI cmdlet,尤其是因为 PowerShell [Core](版本 6 及更高版本),未来的所有努力都将用于,甚至不再拥有它们。有关详细信息,请参阅this answer。
  • 请允许我给你一个标准的建议给新手:如果你accept 一个答案,你会帮助未来的读者,告诉他们什么解决了你的问题。要接受答案,请单击答案左侧大数字下方的大 ✓ 符号(您将获得 2 点声望)。如果您至少有 15 个声望点,您还可以投票给其他有用的答案(也可以选择接受的答案)。如果您的问题尚未解决,请提供反馈,或者,如果您自己找到了解决方案,请self-answer。

标签: windows powershell cmdlet get-wmiobject


【解决方案1】:

使用calculated property:

Get-WmiObject win32_service |
  ? { $_.Name -like '*Front*' -and $_.PathName -like '*logdir*' } |
    select Name, @{ n='LogDir'; e={ $_.PathName -replace '^.+logdir\s+' } }

【讨论】:

    【解决方案2】:

    Split-Path 可以在这里提供帮助...

    Get-WmiObject win32_service |
    ? {$_.Name -like '*Front*'} |
    ? {$_.PathName -like '*logdir*'} |
    Select Name, @{N="PathName";E={Split-Path $_.PathName}}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多