Seite 1 von 1
host automatisch herunterfahren wenn vm beendet
Verfasst: 09.02.2010, 15:31
von booty3009
Hallo!
Ich möchte gerne nach dem herunterfahren einer VM (Windows 2000 Pro SP4), den Host (Windows 7 Professionel) auch herunterfahren. Das soll automatisch geschehen. Wie mache ich das am besten?
Verfasst: 09.02.2010, 15:46
von continuum
du koenntest im Gast eine batch schreiben die ein remote-shutdown des Hosts ausfuehrt.
Wenn das timeout hoch genug ist kannst du die batch vor dem Runterfahren des gasts ausfuehren lassen.
Plan B: ein autoit-script auf dem Host laufen lassen, welches alle 60 sekunden checkt ob es einen Prozess namens vmware-vmx.exe gibt - gibt es keinen solchen Prozess mehr kann der Host runtergefahren werden.
Das ist mit ein paar Zeilen autoit erledigt
Verfasst: 09.02.2010, 15:55
von booty3009
Wie sieht das Script aus und wie erstelle ich es?
Danke!
Verfasst: 09.02.2010, 16:22
von continuum
so zum Beispiel:
Code: Alles auswählen
#include <Process.au3>
While 1
$PID = ProcessExists("vmware-vmx.exe")
If not $PID Then MsgBox(4096, "automatic shutdown", "no VMs running - bye")
If not $PID Then Shutdown(1)
Sleep(5000)
WEnd
Wenn du es kompiliert haben willst sag Bescheid - aber manche Virenscanner werden ueber so etwas meckern ...
Verfasst: 11.02.2010, 09:50
von booty3009
Danke für den Code!
Ich habe in Visual Basic selber ein Programm geschrieben. Dieses startet die VM mit dem VMware Player. Wenn die VM herunterfährt schließt sich anschließend automatisch der Player. Danach fährt der Host dann auch herunter. Das funktioniert super!
Danke nochmal!
Verfasst: 11.02.2010, 09:58
von irix
Dann poste doch einfach dein Script hier wenn du magst, weil dann koennen sich anderen mitfreuen.
Gruss
Joerg
Verfasst: 11.02.2010, 10:50
von booty3009
Code: Alles auswählen
Module Module1
Sub Main()
Misc.InitSystem("test", "VMControlhost")
Dim timeout As Integer = Misc.ReadApplicationConfig("TimeOut", 5)
Dim vmpfad As String = Misc.ReadApplicationConfig
("VMPfad", "C:\Programme\vmware\vmware workstation\vmplayer.exe")
Dim vmstartoption As String = Misc.ReadApplicationConfig("VMStartOption", "-X
-K ""D:\test.vmx""")
Try
Dim p As System.Diagnostics.Process
p = System.Diagnostics.Process.Start(vmpfad, vmstartoption)
p.WaitForExit()
Logging.inf("Prozess wurde mit Wert " & p.ExitCode & " beendet")
Catch ex As Exception
Logging.err(ex)
Logging.inf("VMWare-Datei nicht gefunden")
End Try
System.Diagnostics.Process.Start("shutdown", "-s -f -t " & timeout)
End Sub
End Module
Mit Microsoft Visual Basic 2005 Express Edition erstellt. Erfordert DotNet 2.0!
Für die Erstellung des Programms benötigt man auch noch eine dll Datei. Diese dll Datei erstellt dann den Pfad test\VMcontrolhost. Dort kann man das Timeout und den Pfad der VM ändern. Das Programm würde auch für andere Programme gehen! Logging und Misc stammt aus der englefield.dll (
http://www.englefield.de)!