1

我刚开始使用powershell。并创建了一个脚本来监控我的服务器。但是,我还需要从我的服务器监控我的硬盘和 RAID 配置。这只能通过 HP 的软件来完成。

所以我想要的是:
我有一个来自 HP 的命令行实用程序,我可以用它来监控阵列和磁盘。当我启动这个实用程序时,我得到了这个:

PS C:\Program Files (x86)\Compaq\Hpacucli\Bin> .\hpacucli.exe controller slot=3 physicaldrive "1I:0:1 (port 1I:box 0:bay  1, 750 GB)" show status | out-host 
physicaldrive 1I:0:1 (port 1I:box 0:bay 1, 750 GB): OK

我只想将此输出作为变量在我的脚本中进一步使用。

如何才能做到这一点。

我试过了:

$disk1 = "c:\program files (x86)\Compaq\hpacucli\bin\hpacucli.exe controller slot=3 physicaldrive "1I:0:1 (port 1I:box 0:bay  1, 750 GB)" show status | out-host"

但这不起作用

所以我只想拥有physicaldrive 1I:0:1 (port 1I:box 0:bay 1, 750 GB): OK变量。

我希望有一个人可以帮助我。所以我可以进一步学习使用powershell。

已经谢谢了。丹尼斯

4

1 回答 1

3

摆脱out-hostcmdlet,因为它正在消耗 exe 的输出,例如:

$disk1 = .\hpacucli.exe controller slot=3 physicaldrive "1I:0:1 (port 1I:box 0:bay 1, 750 GB)" show status

使用 PowerShell,请记住,只要您调用管道并且有输出,它将转到输出流,在那里它可以由变量(如上)捕获,或者如果未捕获输出,则显示在屏幕上。当您通过管道传输到 时Out-Host,它会绕过正常输出并将输入“直接”显示到屏幕上。这就是为什么您无法将数据捕获到变量中的原因。

在函数中,这与传统语言有点不同,因为每条产生输出但未被捕获到变量(或重定向到 $null)的语句都将为该函数产生输出。当函数返回超出预期时,许多首次使用 PowerShell 的用户可能会感到惊讶。有关更多详细信息,请查看此 SO 问题的已接受答案

于 2012-10-07T17:56:32.323 回答