Virtuelle Maschine per Script herunterfahren und starten
In Umgebungen mit nur einem oder wenigen virtuellen Servern ist der Einsatz von Produkten aus der System Center-Familie (Data Protection Manager, Virtual Machine Manager …) meist nicht möglich oder ein wenig übertrieben. Man möchte aber trotzdem seine virtuelle Maschine sichern, und das konsistent.
Eine Möglichkeit ist der Einsatz eines Scriptes, das eine virtuelle Maschine herunterfährt, eine Sicherung der Dateien macht und danach die Maschine wieder startet. Diese Scripte sehen wie folgt aus:
shutdown_vm.vbs
Option Explicit
Dim WMIService
Dim VMList
Dim VMName
Dim VMGuid
Dim ShutdownList
Dim Result‚Name des virtuellen Servers, der heruntergefahren werden soll
VMName = "Server_xy"‚Name der WMI-Instanz Virtualisierung auf dem lokalen Computer
Set WMIService = GetObject("winmgmts:\\.\root\virtualization")‚Abfrage für die spezielle virtuelle Maschine, die ich herunterfahren möchte
Set VMList = WMIService.ExecQuery("SELECT * FROM Msvm_ComputerSystem WHERE ElementName=’" & VMName & "’")‚GUID der virtuellen Maschine herausbekommen
VMGuid = VMList.ItemIndex(0).Name‚Abfrage der Msvm_ShutdownComponent für die herausbekommene GUID
Set ShutdownList = WMIService.ExecQuery("SELECT * FROM Msvm_ShutdownComponent WHERE SystemName=’" & VMGuid & "’")‚Das Herunterfahren veranlassen
Result = ShutdownList.ItemIndex(0).InitiateShutdown(True,"Herunterfahren ausgeloest durch script")
startup_vm.vbs
Option Explicit
Dim WMIService
Dim VMList
Dim VMName‚Name des virtuellen Servers, der gestartet werden soll
VMName = "Server_xy"‚Name der WMI-Instanz Virtualisierung auf dem lokalen Computer
Set WMIService = GetObject("winmgmts:\\.\root\virtualization")‚Abfrage für die spezielle virtuelle Maschine, die ich starten möchte
Set VMList = WMIService.ExecQuery("SELECT * FROM Msvm_ComputerSystem WHERE ElementName=’" & VMName & "’")‚ Anfordern eines Status-Wandels der ersten Maschine die wiedergekehrt ist
‚ 2 bedeutet Start, 3 bedeutet Stop and 32769 bedeutet Stand Speichern
VMList.ItemIndex(0).RequestStateChange(2)
In beiden oben aufgelisteten Scripten einfach den Namen des virtuellen Servers eintragen und ausführen, dann wird der Server antweder heruntergefahren oder gestartet.
Jan
Update 30.06.10
ACHTUNG: Dieses Script ist veraltet! Ein aktuelles Powershell-Script gibt es unter dem folgendem Link: