UPS 电池耗尽时 Hyper-V 2012 正常关闭

UPS 电池耗尽时 Hyper-V 2012 正常关闭

背景:

我们在一家小型办公室使用 Windows 2008 R2 在 Hyper-V 中运行了几个虚拟服务器。我们只有 1 个物理主机(并且我们近期不打算改变这一点)。我们打算迁移到 Hyper-V Server 2012。

目前,我们有一个小型 UPS,可以让服务器运行大约 20 分钟,然后向 Windows 2008 发送关机消息。UPS 通过 USB 连接。Windows 2008 将 UPS 识别为电池,并且我们还使用 Eaton 的软件来监控电池。当 Windows 关闭时,它也会正确关闭 VM。

我们不想花费大量时间运行 Server 2012 的完整版本,只是为了让 UPS 关闭服务器,但我们也不希望 Active Directory 和 Exchange 突然关闭。

当 UPS 断电时,我们可以让 Hyper-V Server 2012 正常关闭虚拟机吗?

答案1

Hyper-V Server 至少在这些方面与作为“Server Core”安装的 Windows Server 相同,也就是说,没有图形用户界面。您的 UPS 监控设备是否能在该环境中工作取决于 Eaton 的软件是否可以在没有 GUI 的环境中运行,以及您是否愿意使用命令行工具配置这些设备。

我建议打电话给伊顿询问他们。

答案2

我最终选择的解决方案是创建一个在启动时运行的 VBScript(使用 cscript 和任务计划程序)。

剧本:

set wmi = GetObject("winmgmts:{impersonationLevel=impersonate,(Shutdown)}!\\.\root\cimv2")
set batteryColl = wmi.ExecQuery("select * from Win32_Battery")
set osColl = wmi.ExecQuery("select * from Win32_OperatingSystem")

while true
 for each battery in batteryColl
  battery.Refresh_
  if battery.batteryStatus = 1 and battery.EstimatedChargeRemaining <= 25 then
   for each os in osColl
    os.Win32Shutdown 5
   next
  end if
 next
 wscript.Sleep 15000
wend

信用:https://social.technet.microsoft.com/Forums/windowsserver/en-US/5cea0070-55f0-4f0e-b727-222203bf0463/hyperv-core-and-ups

答案3

我发现每次断电都会发生一次事件。可以将关机脚本附加到该事件上。

在此处输入图片描述

我的脚本

$continue = $true
while($continue){
   $batt = (Get-CimInstance -ClassName Win32_Battery)
   if ($batt.BatteryStatus -eq 2){
      $continue = $false
   } elseif ($batt.BatteryStatus -eq 1 -and $batt.EstimatedChargeRemaining -le 70){
      $continue = $false
      & "C:\Windows\System32\shutdown.exe" /s /t 60 /d u:6:12
   } else {
      Start-Sleep -s 60
   }
}

相关内容