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}