1

因此,我尝试使用我发现的脚本来监控四台 UPS 并向大约 15 台服务器发送关机信号。我对 PowerShell 很陌生,并且希望能够在查询多个 UPS 单元方面获得一些帮助。

这是脚本:(很长,我认为 pastebin 会更容易): http: //pastebin.com/Uya5Nkwv

我尝试了以下方法,但无济于事。

PS C:\Users\myuser> get-wmiobject win32_battery | select "JS0745012650American P
ower ConversionSmart-UPS 2200 RM FW:665.6.D USB FW:7.3"

JS0745012650American Power ConversionSmart-UPS 2200 RM FW:665.6.D USB FW:7.3
----------------------------------------------------------------------------

PS C:\Users\myuser> get-wmiobject win32_battery | select EstimatedRunTime where
DeviceID like JS07*
Select-Object : A positional parameter cannot be found that accepts argument 'w
here'.
At line:1 char:37
+ get-wmiobject win32_battery | select <<<<  EstimatedRunTime where DeviceID li
ke JS07*
+ CategoryInfo          : InvalidArgument: (:) [Select-Object], ParameterB
indingException
+ FullyQualifiedErrorId : PositionalParameterNotFound,Microsoft.PowerShell
.Commands.SelectObjectCommand

PS C:\Users\myuser>

基本上有五个 UP,当我这样做的时候

get-wmiobject win32_battery

我可以查看唯一标识符:

DeviceID                    : JS0748005250American Power ConversionSmart-UPS 30
                          00 RM FW:666.6.D USB FW:7.3

那么如何查询所述脚本中的所有UPS?一旦我弄清楚如何做到这一点,我很确定我可以找出关闭信号/csv 文件。

4

2 回答 2

1

您不需要手动遍历电池,真的,您已经完成了 99%。

Get-WmiObject win32_battery | Where-Object {$_.DeviceID -match "JS07"} | select estimatedruntime

这应该完全符合您的要求,假设所有 DeviceID 都包含 JS07 作为其标识符的一部分。

如果您需要更多信息,例如设备 ID 或名称:

Get-WmiObject win32_battery | Where-Object {$_.DeviceID -match "JS07"} | select Name, estimatedruntime
于 2013-10-15T18:36:09.330 回答
0

修改该脚本以遍历计算机名称列表。从第 94 行开始插入一个 foreach 语句,例如,并在脚本的末尾foreach ($computer in 'pc1','pc2','pc3','pc4') {放置一个结束。}这将通过您提供的每台计算机循环脚本。

于 2013-10-15T18:20:34.690 回答