vmrun zur Automatisierung von VMWare Workstation nutzen
Für kleinere Server oder den Heimgebrauch ist nach wie vor VMWare Workstation für die Virtualisierung das Mittel der Wahl. Wer des Öfteren virtuelle Maschinen starten und beenden muss, um z.B. Backups zu machen, wird sich schnell nach einer Möglichkeit der Automatisierung dieser Vorgänge sehnen.
VMWare Workstation stellt dazu das Kommandozeilen-Tool vmrun zu Verfügung. Über dieses lassen sich sowohl lokal laufende VMs als auch auf entfernten Rechnern laufende VMs (Sharing) steuern.
vmrun
Das Tool liegt bei einer Windows-Installation unter C:\Program Files (x86)\VMware\VMware VIX\vmrun.exe bzw. auch unter C:\Program Files (x86)\VMware\VMware Workstation\vmrun.exe.
Aufbau der Befehle
Befehl für die Steuerung von lokalen VMs:
vmrun -T ws <command>
Befehl für die Steuerung von lokalen und entfernten Shared-VMs:
vmrun -T ws-shared -h <hostname> -u <username> -p <password> <command>
vmrun -T ws-shared -h https://localhost:8333/sdk -u vmadmin -p password list
Status ermitteln
Eine Liste aller laufenden virtuellen Maschinen abfragen:
vmrun -T ws list
vmrun -T ws-shared -h https://localhost:8333/sdk -u vmadmin -p password list
VM starten/stoppen
Um gezielt eine virtuelle Maschine zu starten oder zu stoppen muss diese durch die Angabe der zugehörigen vmx-Datei spezifiziert werden. Für lokale Maschinen passiert dies durch Angabe des vollständigen Dateipfads, bei Shared-VMs wird ein Pfad innerhalb des Standard-Datastores angegeben. Die Pfade bzw. Datastore-Pfade lassen sich am einfachsten mittels des vmrun-Befehls list ermitteln.
- VM starten: start
- VM stoppen: stop
- VM Guest-OS herunterfahren: stop mit Zusatz soft
- VM pausieren: pause
- VM wiederherstellen: unpause
- VM reseten: reset
vmrun -T ws start V:\webserver\webserver.vmx
vmrun -T ws-shared -h https://localhost:8333/sdk -u vmadmin -p password stop "[standard] webserver/webserver.vmx" soft
vmrun -T ws-shared -h https://192.168.0.1:8333/sdk -u vmadmin -p password stop "[standard] webserver/webserver.vmx"
Bei Zugriff auf Shared-VMs haben alle Befehle auch immer mit eingeschränkten Nutzerrechten funktioniert, bei der Steuerung von lokalen VMs hat sich die Ausführung der Befehle mit Administratorrechten bewährt.
Batch-Skript zur Automatisierung
Das folgende Batch-Skript kann zum gleichzeitigen Starten bzw. Stoppen von mehreren virtuellen Maschinen genutzt werden.
Das untenstehende Skript fährt die Gast-Betriebssysteme sanft herunter und lässt 5 Sekunden Zeitabstand zwischen den einzelnen abgeschlossenen Shutdown-Vorgängen.
@echo off
setlocal EnableDelayedExpansion
rem vmwares
SET "vmware_list[1]=dnsserver/dnsserver.vmx"
SET "vmware_list[2]=webserver/webserver.vmx"
SET "vmware_list[3]=terminalserver/terminalserver.vmx"
SET "vmware_list[4]=mailserver/mailserver.vmx"
rem config
SET "vmware_vmrun="C:\Program Files (x86)\VMware\VMware VIX\vmrun.exe""
SET "vmware_host=https://localhost:8333/sdk"
SET "vmware_username=admin"
SET "vmware_password=password"
SET "vmware_timeout=5"
rem action
set "x=1"
:SymLoop
if defined vmware_list[%x%] (
SET vmware_command=%vmware_vmrun% -T ws-shared -h %vmware_host% -u %vmware_username% -p %vmware_password% stop "[standard] %%vmware_list[%x%]%%" soft
call echo !vmware_command!
call !vmware_command!
call ping -n %vmware_timeout% localhost > nul
set /a "x+=1"
GOTO :SymLoop
)
Um mit dem angegebenen Skript virtuelle Maschinen zu Starten, muss der unten stehende Code-Block im obigen Skript ersetzt werden. Das Timeout zwischen den einzelnen Befehlen wird auf 60 Sekunden erhöht um zu verhindern, dass zu viele virtuelle Maschinen gleichzeitig booten und sich durch die erhöhte Festplattenaktivität gegenseitig ausbremsen.
SET "vmware_timeout=60"
rem action
set "x=1"
:SymLoop
if defined vmware_list[%x%] (
SET vmware_command=%vmware_vmrun% -T ws-shared -h %vmware_host% -u %vmware_username% -p %vmware_password% start "[standard] %%vmware_list[%x%]%%"
call echo !vmware_command!
call !vmware_command!
call ping -n %vmware_timeout% localhost > nul
set /a "x+=1"
GOTO :SymLoop
)
Hallo,
erstmal danke für die Anleitung. Ich hab echt lange gesucht, da genau deine Infos in der PDF von VMWare fehlen.
Ich hab ein VMWare WS 12 Pro mit Shared VMs laufen. Laut der PDF wird das Clonen bei VMWare Server nicht unterstützt.
Wie sieht es mit den Workstation Shared-VMs aus?