Вставка разделителя в вывод PowerShell - PullRequest
0 голосов
/ 25 мая 2018

Результат 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 голосов
/ 26 мая 2018

Чтобы предложить более краткую (и немного более быструю) альтернативу полезный ответ Билла Стюарта :

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).

  • $(...) собирает их как массив [object[]], который ...

  • ... разрешает использование этого массива в качестве LHS оператора -join для объединения элементов массива с | в качестве разделителя для формирования единой строки.

В целом, вы получаете одну строку для каждого объекта ввода, как вам нужно.

0 голосов
/ 25 мая 2018

Как насчет:

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

Используйте ft (Format-Table) только для удобного просмотра в консоли PowerShell (это не хорошо для отправки данных в другие приложения, потому что тогда вам придется отменитьформатирование - так что не форматируйте в первую очередь).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...