当我们停电时,我正在编写一个 Powershell 脚本来进行一些服务器管理。目前该脚本正在使用 WMI Win32)Battery 类来查看 BatteryStatus 是 1(正在放电)还是 2(未知(在 A/C 上)),但我不确定这是最好的方法。有几种状态可能同时为真。
例如,电池可能正在放电 (1) 和部分充电 (11) 或在交流电 (2) 但临界 (5) 或正在充电 (6) 或部分充电 (11)。这对我来说没有意义。BatteryStatus 对于我的预期目的是否可靠?Windows 如何确定返回哪个状态?在我的测试中,除了状态 1 或 2,我没有看到任何其他内容。
Win32_Battery的文档表明可用性也可能表明我们正在使用电池。这是一个更好的方法吗,也许是 BatteryStatus 和 Availability 的结合?
在我寻找答案的过程中,我发现了一个看起来很完美的答案,它使用了 root\wmi 命名空间中未记录的 BatteryStatus 类中的“PowerOnline”。这在我的笔记本电脑上效果很好,但在尝试从我们的 Windows 2012 服务器访问它时出现以下错误:
PS C:\Windows\system32> gwmi -Class batterystatus -Namespace root\wmi
gwmi : Invalid class "batterystatus"
At line:1 char:1
+ gwmi -Class batterystatus -Namespace root\wmi
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidType: (:) [Get-WmiObject], ManagementException
+ FullyQualifiedErrorId : GetWMIManagementException,Microsoft.PowerShell.Commands.GetWmiObjectCommand
这个类在服务器上不可用吗?
那么使用 WMI,了解我是使用 UPS 电池还是交流电源的最可靠方法是什么?