我有来自外部命令的输出,如:
Status Pool name Media Type MS # of media Free [MB]
===============================================================================
Good pool1 LTO-Ultrium No 303 298066893
Good pool2 LTO-Ultrium No 1 1525878
Good pool3 LTO-Ultrium No 282 348735361
Good pool4 LTO-Ultrium No 473 588150645
我需要在PowerShell“pool1”,“pool2”,“pool3”中解析...并在foreach中运行命令...对此有任何想法,而不将输出导出到xml,csv&等? 感谢
和,Q2, 解析这些是相同或相似的方式:
Good [QGHL5MMA] QGHL5MMA [pool1: 322] No None
Good [QGHL5N2Y] QGHL5N2Y [pool1: 922] No None
Good [QGHL5MUL] QGHL5MUL [pool1: 621] No None
从这个输出中,我只需要第5列的文字(322,922,621 ......)。再次感谢
答案 0 :(得分:4)
我将内容放入文件test.txt
并尝试如下:
gc .\test.txt | select-string '.*pool\d+.*' | foreach { $pool = ($_ -split '\s+')[1];write-host $pool;}
输出:
pool1
pool2
pool3
pool4
在命令行中,我搜索模式为“pool”后跟数字的行,然后使用空格作为分隔符将其拆分,然后您可以获得名称“pool1”等来执行您想要的操作。
答案 1 :(得分:1)
如果你创建了对象,你可以在完成后用它们做各种各样的Powershell事情。 Powershell就是关于物体的。
使用您的样本数据和Powershell V3
$CommandData =
(@'
Status Pool name Media Type MS # of media Free [MB]
===============================================================================
Good pool1 LTO-Ultrium No 303 298066893
Good pool2 LTO-Ultrium No 1 1525878
Good pool3 LTO-Ultrium No 282 348735361
Good 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 -AutoSize
Status Pool MediaType MS No Free[MB]
------ ---- --------- -- -- --------
Good pool1 LTO-Ultrium No 303 298066893
Good pool2 LTO-Ultrium No 1 1525878
Good pool3 LTO-Ultrium No 282 348735361
Good pool4 LTO-Ultrium No 473 588150645
答案 2 :(得分:0)
一个简单的正则表达式将捕获结果。
gc .\table.txt | sls '\s+(pool\d+)\s+' | % {$_.Matches.Groups[1].Value}