Get-Process -Name explorer | select Handles,WS,CPU,Id,ProcessName | ft -HideTableHeaders
的结果返回以下输出:
2623 255336448 178.125 10080 explorer
为了将这些数据摄取到第三方系统,我需要管道分隔结果:
2623|255336448|178.125|10080|explorer
实现这一目标的最佳方法是什么?
答案 0 :(得分:4)
怎么样:
(Get-Process explorer |
Select-Object Handles,Ws,CPU,ID,ProcessName |
ConvertTo-Csv -Delimiter '|' -NoTypeInformation |
Select-Object -Skip 1) -replace '"',''
仅使用ft
(Format-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,以便将数组的元素与|
作为分隔符连接,形成单个字符串。
总的来说,每个输入对象都会根据需要获得一个字符串。