将分隔符插入PowerShell输出

时间:2018-05-25 19:27:51

标签: powershell

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

2623 255336448 178.125 10080 explorer 

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

2623|255336448|178.125|10080|explorer 

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

2 个答案:

答案 0 :(得分:4)

怎么样:

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

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

答案 1 :(得分: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,以便将数组的元素与|作为分隔符连接,形成单个字符串。

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