【问题标题】:Select-String to only show the line that matches not entire objectSelect-String 仅显示不匹配整个对象的行
【发布时间】:2021-04-23 09:26:14
【问题描述】:

我怎样才能让它只显示单行,而不是整个对象,就像 bash 中的 grep 一样。 Out-String -Stream 应该将其转换为字符串,我有大量的 jsons 结构,目前我在 python onelines 中进行过滤

Get-Service | Select-Object -Property Name | Where-Object -Property Name -Match "Winrm" |\
ConvertTo-Json | Out-String -Stream | Select-String -SimpleMatch 'Name'

{
    "Name":  "WinRM"
}

Python oneliner 有点不方便 :-) :

Get-Service | ConvertTo-Json | \
python.exe -c "import sys,re;[sys.stdout.write(l) for l in sys.stdin if re.search(r'WinRM', l)]"                                
        "ServiceName":  "WinRM",
        "Name":  "WinRM",

【问题讨论】:

  • Get-Service -Name "WinRM" ?
  • 您是否正在寻找这样的东西! (Get-Service | Select-Object -Property Name | Where-Object -Property Name -Match "Winrm").Name
  • 如果你有json输入,那么你可以使用ConvertFrom-Json获取值。类似于 jq
  • 问题是对 json 进行过滤,Get-Service 只是我发现的可以生成 json 的最小示例。

标签: powershell tostring


【解决方案1】:

Select-String 作用于字符串数组并返回与模式匹配的元素。您的 JSON 字符串仍然是单个字符串,但如果您将其拆分为换行符,则可以使用 Select-String 命令仅获取包含 Name 的行并省略大括号。以下示例有助于说明这一点。

$TestJSON = @'
{
    "Name":  "WinRM"
}
'@

$TestJSON | Select-String -Pattern 'Name'
# {
#     "Name":  "WinRM"
# }


($TestJSON.Split([Environment]::NewLine) | Select-String -Pattern 'Name' | Out-String).Trim() # Note that 'Trim' removes whitespace around your desired value
# "Name":  "WinRM"

因此,总而言之,您可以获得Name 属性,它的值采用 JSON 格式,但没有使用以下单行的大括号。

Get-Service | Where-Object { $_.Name -eq "WinRM" } | Select-Object -Property Name | ConvertTo-Json | ForEach-Object { $_.Split([Environment]::NewLine) } | Select-String -Pattern "Name" | Out-String | ForEach-Object { $_.Trim() }
# "Name":  "WinRM"

然后走过这个......

  • 我们获得所有服务
  • 我们过滤掉 WinRM 服务
  • 我们选择Name 属性
  • 我们将其转换为 JSON
  • 我们在每个换行符上拆分 JSON 输出以生成字符串数组
  • 我们返回包含Name的字符串数组的元素
  • 我们将管道中的任何内容转换为字符串
  • 我们使用Trim 函数来删除字符串周围的空格

【讨论】:

  • 拆分 json 并使用 Trim 是关键。比grep WinRM更难一点
  • @MortenB 很高兴它有帮助!如果有机会,请随时将此标记为解决方案:)
猜你喜欢
  • 2020-03-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-23
相关资源
最近更新 更多