powershell 从命令输出中获取内容
Posted
技术标签:
【中文标题】powershell 从命令输出中获取内容【英文标题】:powershell get content from command output 【发布时间】:2014-01-01 23:53:49 【问题描述】:我有来自外部命令的输出,例如:
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 等? 谢谢
并且,第二季度, 在这里解析这些是相同或相似的方式:
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...)中的文本。再次感谢
【问题讨论】:
【参考方案1】:一个简单的正则表达式将捕获结果。
gc .\table.txt | sls '\s+(pool\d+)\s+' | % $_.Matches.Groups[1].Value
【讨论】:
【参考方案2】:如果您创建对象,您可以在完成后使用它们执行各种 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
【讨论】:
我需要学习你的例子——我是数组、哈希等方面的新手。但我认为,对于脚本的另一部分,我没有其他方法......【参考方案3】:我将内容放入文件test.txt
并尝试如下:
gc .\test.txt | select-string '.*pool\d+.*' | foreach $pool = ($_ -split '\s+')[1];write-host $pool;
还有输出:
pool1
pool2
pool3
pool4
在命令行中,我搜索模式为 'pool' 后跟数字的行,然后使用空格作为分隔符将其拆分,然后您可以获得名称 'pool1' 等来执行您想要的操作。
【讨论】:
以上是关于powershell 从命令输出中获取内容的主要内容,如果未能解决你的问题,请参考以下文章
从PowerShell中使用参数和凭据启动.ps1脚本并从中获取输出