Powershell с одним вкладышем для печати свойств процесса - PullRequest
0 голосов
/ 27 марта 2020

Я пытаюсь научить себя своему Powershell (5.1) и сказал

PS > Get-Process | Export-CSV process.csv

В качестве упражнения я хотел бы извлечь вторую строку process.csv, распечатать все свойства во 2-й строке process.csv в отдельных строках автоматически нумеруют их, используя однострочник PS.

В * nix я бы сказал что-то вроде

head -2 process.csv | tail -1 | tr "," "\n" | nl

Но мне трудно воспроизвести этот вид однострочной записи в PS. Может быть, я не должен пытаться в первую очередь. В любом случае, ниже показано, как далеко я продвинулась:

(get-content process.csv -TotalCount 2 | select -Index 1).Replace(",", "`r`n")

Это вроде работает и выдает это

"Name" "SI" "Handles" ...

что не совсем то, что я ищу. PS говорит, что на выходе получается один большой строковый объект, а не отдельные строки. Итак, я предполагаю, что несколько строк, содержащихся в одном большом объекте / строке, необходимо передать как отдельные объекты в '' foreach '' ', но я не могу понять, как это сделать. В любом случае я хочу, чтобы вывод выглядел следующим образом ...

  1. Имя
  2. SI
  3. Ручки ...

Любые идеи? Заранее спасибо! Очень уважительно.

Ответы [ 2 ]

0 голосов
/ 30 марта 2020

Благодаря HappyBob, исследованиям, методам проб и ошибок я разработал следующую однострочную оболочку Powershell:

$a = (gc process.csv -Tot 2)[1]; $i=1; ("$a".Replace('"','')).Split(',') | %($_) {"$i"+". "+"$_"; $i++}

, которая выдает

  1. Имя
  2. СИ
  3. Ручки
0 голосов
/ 27 марта 2020
Вот один вкладыш в Power Shell для результатов:
(ps)[1] | select *
Теперь для ваших шагов: Просто получите 10 ..
(ps)[0..9] | select * | export-csv -path "c:\temp\ps_$(Get-Date -f "mmddyyy").csv" -NoTypeInformation -force

$lineprops = (import-csv -path "c:\temp\ps_$(Get-Date -f "mmddyyy").csv")[1]
Это объект ps, поэтому вы можете выбрать свойства et c.
$lineprops.name

$lineprops | select name, id , CPU

хотите проиндексировать его, используйте массив для большего удовольствия

$arrayofvalues = ($lineprops.PSObject.Properties).value 

$arrayofvalues[0,2,2,6+10..13+15] 

[array]::IndexOf($arrayofvalues,$arrayofvalues[10]) # kinda redundant by true
вот индексированные объекты
$indexed=@()
$psnow=(ps)[0..9]
foreach($i in $psnow )
{ 
    $indexed += [pscustomobject]@{ Name=$i.name; ID=$i.id; index = [array]::IndexOf($psnow,$i)}
}
$indexed

Сократите все это до одной строки

((ipcsv -path c:\file.csv)[1].PSObject.Properties).value  | %{$i++;[pscustomobject]@{ Value=$_; Index = $i}}
Вы можете добавить это в список массивов, чтобы ускорить его
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...