Задний план:
Мы запускаем пару виртуальных серверов в Hyper-V в небольшом офисе с Windows 2008 R2. У нас есть только 1 физический хост (и мы не планируем его менять в ближайшее время). Мы планируем перейти на Hyper-V Server 2012.
В настоящее время у нас есть небольшой ИБП, который поддерживает работу сервера около 20 минут, а затем отправляет сообщение о завершении работы в Windows 2008. ИБП подключается через USB. Windows 2008 распознает ИБП как аккумулятор, а также есть программное обеспечение от Eaton, которое мы используем для контроля заряда аккумулятора. Когда Windows завершает работу, она также корректно завершает работу виртуальной машины.
Нам не нужны накладные расходы на запуск полной версии Server 2012 только для того, чтобы ИБП выключил сервер, но мы также не хотим, чтобы Active Directory и Exchange внезапно отключились.
Можем ли мы заставить Hyper-V Server 2012 корректно выключить виртуальную машину, когда в ИБП закончится питание?
Сервер Hyper-V, по крайней мере в этом отношении, аналогичен Windows Server, установленному как «Server Core», то есть без графического пользовательского интерфейса. Будет ли работать ваша система мониторинга ИБП в этой среде или нет, будет зависеть от того, сможет ли программное обеспечение Eaton работать в среде без графического интерфейса пользователя и удобно ли вам настраивать эти вещи с помощью инструментов командной строки.
Я бы посоветовал позвонить в Eaton, чтобы спросить их.
Решение, к которому я пришел, заключалось в создании VBScript, который запускается при запуске (с использованием cscript и Task Scheduler).
Сценарий:
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