将分隔符插入PowerShell输出

问题描述 投票:2回答:2

Get-Process -Name explorer | select Handles,WS,CPU,Id,ProcessName | ft -HideTableHeaders的结果返回以下输出:

2623 255336448 178.125 10080 explorer 

为了将这些数据摄取到第三方系统,我需要管道分隔结果:

2623|255336448|178.125|10080|explorer 

实现这一目标的最佳方法是什么?

powershell
2个回答
4
投票

怎么样:

(Get-Process explorer |
  Select-Object Handles,Ws,CPU,ID,ProcessName |
  ConvertTo-Csv -Delimiter '|' -NoTypeInformation |
  Select-Object -Skip 1) -replace '"',''

只使用ftFormat-Table)在PowerShell控制台中轻松查看(它不适合将数据发送到其他应用程序,因为那时你必须撤消格式化 - 所以不要首先格式化)。


1
投票

Bill Stewart's helpful answer提供更简洁(并且更快)的替代方案:

Get-Process -Name explorer | ForEach-Object { 
  $(foreach ($prop in 'Handles', 'WS', 'CPU', 'Id', 'ProcessName') { $_.$prop }) -join '|'
}
  • foreach ($prop in 'Handles', 'WS', 'CPU', 'Id', 'ProcessName') { $_.$prop }输出每个过程对象的所有感兴趣的属性($_ForEach-Object cmdlet提供的手头输入对象)。
  • $(...)将它们收集为[object[]]阵列,其中......
  • ...使该数组用作-join运算符的LHS,以便将|作为分隔符连接数组的元素以形成单个字符串。

总的来说,根据需要,每个输入对象都会得到一个字符串。

© www.soinside.com 2019 - 2024. All rights reserved.