powershell get content from command output powershell get content from command output powershell powershell

powershell get content from command output


I put the content into a file test.txt and did a try as below:

gc .\test.txt | select-string '.*pool\d+.*' | foreach { $pool = ($_  -split '\s+')[1];write-host $pool;}

And the output:

pool1pool2pool3pool4

In the command line I search the lines which has the pattern as 'pool' followed by digits, and then split it using whitespace as delimiter, then you can get the name 'pool1' etc. to do the things you want.


If you create objects, you can do all kinds of Powershell things with them when you're done. Powershell is all about the objects.

Using your sample data and Powershell V3

$CommandData = (@'Status  Pool name                 Media Type        MS   # of media   Free [MB]===============================================================================Good    pool1           LTO-Ultrium       No         303   298066893Good    pool2           LTO-Ultrium       No           1     1525878Good    pool3           LTO-Ultrium       No         282   348735361Good    pool4           LTO-Ultrium       No         473   588150645'@).split("`n") |foreach {$_.trim()}$CommandData |  foreach {  $Props = &{$args} Status Pool Media Type MS No Free[MB]  if ($_ -match '\d+\s*$')   {$Parts = $_ -split '\s+'    $Hash = [ordered]@{}    for ($i=0; $i -le 5; $i++)     {$Hash[$Props[$i]] = $Parts[$i]}    [PSCustomObject]$Hash    }   } | | Format-Table -AutoSizeStatus Pool  MediaType   MS No  Free[MB] ------ ----  ---------   -- --  -------- Good   pool1 LTO-Ultrium No 303 298066893Good   pool2 LTO-Ultrium No 1   1525878  Good   pool3 LTO-Ultrium No 282 348735361Good   pool4 LTO-Ultrium No 473 588150645


A simple regex will capture the result.

gc .\table.txt | sls '\s+(pool\d+)\s+' | % {$_.Matches.Groups[1].Value}