blog.bartlweb - a technologist's external brain

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
)

Dieser Artikel hat dir deinen Tag gerettet?
... und mühevolles Probieren, Recherchieren und damit Stunden an Zeit gespart? ... oder einfach nur dein Problem gelöst?

Dann würde ich mich freuen, wenn Du meine Zeit für die Erstellung dieses Blogartikels mit einer kleinen Spende honorierst:

Kommentare

  1. 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?

    kommentieren

    1. Hallo Sven,

      hab ich selbst bisher noch nicht benötigt und kann ich dir daher leider auch nicht sagen.

      lg Christian

      kommentieren

  2. die Befehle funktionieren leider nicht, Vmware ws 9, wsx 1.0.2

    kommentieren

Kommentar schreiben

Deine E-Mailadresse wird nur für Benachrichtigungen und Rückfragen verwendet und wird nicht veröffentlicht.

Benachrichtigungen können jederzeit wieder abbestellt werden.

Bitte tippe die Zahlenkombination "2447" ein, nur dann kann ich deinen Kommentar entgegennehmen.

Bitte fülle dieses Feld nicht aus, nur dann kann ich deinen Kommentar entgegennehmen.