2013-10-15 24 views
1

所以我試圖用我發現的腳本來監控四臺UPS併發送關機信號到15臺服務器。我對PowerShell相當陌生,並且希望能夠查詢多個UPS設備。查詢多個電池powershell腳本get-wmiobject win32_battery

下面是腳本:(這是很長,我想到了一個引擎收錄會更容易些):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> 

基本上有五個UPS,當我做

get-wmiobject win32_battery 

我看見一個唯一的標識符:

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

所以,我怎麼能查詢了UPS的所有在說腳本?一旦我找出如何做到這一點,我敢肯定我可以找出關閉信號/ csv文件。

回答

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 
0

修改該腳本以迭代計算機名稱列表。從94行開始插入一個foreach語句,例如foreach ($computer in 'pc1','pc2','pc3','pc4') {,並在腳本的末尾放置一個關閉}。這將通過您提供的每臺計算機循環腳本。

+0

對不起,我應該澄清。所有四臺UPS都插入一臺電腦。沒有多臺電腦可以監控,只需發送關機信號即可。 – user2833447

+0

有點相關,還有: Get-WmiObject -ComputerName Computer1,Computer2,Serve1,Server2'和傳統的C風格的foreach循環一樣有效和簡單。 –

+0

當然,但我正在對現有腳本進行微小更改。當然,如果所有的UPS都連接到一臺PC上,那就沒有任何意義了。 :-) –