Hallo jani,
klar kannst Du das beliebig verfeinern. Die Abfrage ob Dateien existieren (oder NICHT) macht man z.B. mit
if exist "%ziel%\%Rechner1%\%vmdkname1%.lck" goto shutdownvm1
oder
if NOT exist "%ziel%\%Rechner1%\%vmdkname1%.lck" goto shutdownvm1
Viele wertvolle Infos zur DOS-Batch-Programmierung findest Du z.B. unter
http://www.antonis.de/dos/batchtut/pittipla/index.htm
http://www.antonis.de/dos/batchtut/bat-kurs/
http://www.computerhope.com/batch.htm
http://www.libe.net/themen/BATch-Befehle.php
http://www.dosware.de/home/tips.htm
http://de.wikibooks.org/wiki/Batch-Prog ... ch_Befehle
Wenn Dich mein eigenes Skript interessiert (OHNE Gewähr natürlich, bin auch kein Profi ...), dann lies hier weiter:
Gruß
Andreas
:: ############# DOS-Batch zum Sichern von VMs unter VMware Server ################################
::
:: Der Batch untersucht, ob VMs (Virtuelle Maschinen) aktiv sind.
:: Dazu überprüft er die Existenz der Lock-Dateien (*.lck).
:: Wenn existent, werden die VMs mit Hilfe des Perl-Skripts vmware-cmd herutergefahren
:: und aus dem Inventory ausgetragen.
:: Anschließend werden beliebige Kopier- und Sicherungsaktionen gestartet,
:: die VMs wieder gestartet und im Inventory des VMware Server registriert.
::
:: Voraussetzungen: 1. Der Pfad zu vmware-cmd muss im PATH-Eintrag von Windows stehen
:: 2. Im folgenden Abschnitt müssen sinnvolle Werte für diverse
:: Verzeichnisse und Variablen eingetragen werden
::
:: AKR 21.07.2006
:: #################################################################################################
@echo off
:: Uhrzeit im Format HH.MM.SS auslesen und zwischenspeichern (keine Zehntelsekunden! deswegen :~0,8)
SET startzeit=%TIME:~0,8%
:: ############# Verzeichnisse und Variablen definieren #############
::--------------------------------------------------------------------------------------------
:: Hier bitte das Verzeichnis angeben, unter dem ALLE VM-Ordner liegen (z.B. E:\VM)
set ziel=E:\VM
::--------------------------------------------------------------------------------------------
:: Hier bitte den Ordnernamen jeder einzelnen VM angeben (z.B. W2k Prof)
set rechner1=dbwww
set rechner2=W2kProf
::set rechner3=
::--------------------------------------------------------------------------------------------
:: Hier bitte den Namen der jeweiligen *.vmx-Datei angeben (z.B. Windows 2000 Server.vmx)
set vmxname1=Windows 2000 Server.vmx
set vmxname2=win2000pro.vmx
::set vmxname3=
::--------------------------------------------------------------------------------------------
:: Hier bitte den Namen der jeweiligen *.vmdk-Datei angeben (z.B. dbwww_C.vmdk)
set vmdkname1=dbwww_C.vmdk
set vmdkname2=W2k_D.vmdk
::set vmdkname3=
::--------------------------------------------------------------------------------------------
:: Verzeichnis von vmware-cmd angeben, davor ein cd-Kommando!
cd "E:\Programme\Tools\VMware Server\VMware VmPerl Scripting API"
if errorlevel 1 goto error-cmd
::--------------------------------------------------------------------------------------------
:: Quell- und Zielverzeichnis der zu sichernden VMs ("E:\VM\test")
set copyquelle="E:\VM\test"
set copyziel="D:\VM_Backup"
::--------------------------------------------------------------------------------------------
:: Speicherverzeichnis der Logdatei (z.B. c:\ oder f:\Logs\ )
set logablage=C:\
:: Dateiname der Logdatei (z.B. VM-Backup-Log.txt)
set logdatei=VM-Backup-Log.txt
:: Kurze Info
echo Dieses Batch beendet alle laufenden VMs
echo und sichert das Verzeichnis %copyquelle% nach %copyziel%.
echo Eine Logdatei wird unter %logablage%%logdatei% abgelegt.
echo.
:: ############# VMs beenden #############
:: Alle VMs überprüfen, ob sie laufen (*.lck existiert?) und wenn nötig herunterfahren
:check0
if exist "%ziel%\%Rechner1%\%vmdkname1%.lck" goto shutdownvm1
if exist "%ziel%\%Rechner2%\%vmdkname2%.lck" goto shutdownvm2
::if exist "%ziel%\%Rechner3%\%vmdkname3%.lck" goto shutdownvm3
if NOT exist "%ziel%\%Rechner1%\%vmdkname1%.lck" goto copy
if NOT exist "%ziel%\%Rechner2%\%vmdkname2%.lck" goto copy
::if NOT exist "%ziel%\%Rechner3%\%vmdkname3%.lck" goto copy
:shutdownvm1
call vmware-cmd -q "%ziel%\%Rechner1%\%vmxname1%" stop trysoft
call vmware-cmd -q -s unregister "%ziel%\%rechner1%\%vmxname1%"
if errorlevel 1 goto error-cmd
echo.
echo ==} Die VM [%rechner1%] wurde gestoppt
goto check0
:shutdownvm2
call vmware-cmd -q "%ziel%\%Rechner2%\%vmxname2%" stop trysoft
call vmware-cmd -q -s unregister "%ziel%\%rechner2%\%vmxname2%"
if errorlevel 1 goto error-cmd
echo.
echo ==} Die VM [%rechner2%] wurde gestoppt
::goto check0
:: (Achtung!!! Sprunganweisung goto check0 nach ALLEN, AUSSER nach
:: dem letzten verwendeten shutdownvmx (x=1,2,3,...) eintragen!!!
:: :shutdownvm3
::call vmware-cmd -q "%ziel%\%Rechner3%\%vmxname3%" stop trysoft
::call vmware-cmd -q -s unregister "%ziel%\%rechner3%\%vmxname3%"
::if errorlevel 1 goto error-cmd
::echo.
::echo ==} Die VM [%rechner3%] wurde gestoppt
::goto check0
:: (Achtung!!! Sprunganweisung "goto check0" nach ALLEN, AUSSER nach
:: dem letzten verwendeten shutdownvmx (x=1,2,3,...) eintragen!!!
:: Warten, bis alle VMs beendet sind
:wait
:: ca. 10 Sekunden warten [Bei ping-Problemen kann die folgende Zeile entfernt werden]
@ping localhost -n 10>NUL
if exist "%ziel%\%Rechner1%\%vmdkname1%.lck" goto wait
if exist "%ziel%\%Rechner2%\%vmdkname2%.lck" goto wait
::if exist "%ziel%\%Rechner3%\%vmdkname3%.lck" goto wait
:: ############# Kopieraktionen #############
cls
:copy
echo.
echo ==} Alle VMs wurden beendet.
echo ==} Der Sicherungsvorgang startet nun.
echo ==} Ich kopiere die folgenden Dateien
echo ==} von %copyquelle% nach %copyziel%:
:: VMs werden gesichert, gelöscht, verschoben, umbenannt, ...
:: ... was immer robocopy oder xcopy hergeben ...
xcopy %copyquelle% %copyziel% /S /E /C /H /O /R /Y /V
:: Mögliche Parameter von xcopy [QUELLE] [ZIEL] /Parameter
:: von [QUELLE] zu [ZIEL] wird kopiert
:: (/E)Alle Unterverzeichnise kopieren ...
:: (/S)... egal ob sie leer sind oder nicht
:: (/C)Kopieren auch dann fortsetzen, wenn Fehler auftauchen ...
:: (/H)... oder die Dateien eigentlich als "versteckt" oder "System" gekennzeichnet sind
:: (/O)Alle Schreib- und Benutzerrechte mit kopieren
:: (/R)Alte Version des Backups überschreiben, auch wenn sie schreibgeschützt ist
:: (/Y)Ständige Nachfrage "Überschreiben?" bejahen
:: (/D)Nur die jeweils aktuelleren Dateien bleiben erhalten
:: (/V)Alle kopierten Dateien überprüfen
:: ############# VMs wieder starten #############
echo.
echo ==} Der Kopiervorgang wurde beendet.
::Rechner werden nun wieder in das Inventory des VMWare-Servers gelesen und gestartet
:check1
if exist "%ziel%\%Rechner1%\%vmxname1%" goto register1
:check2
if exist "%ziel%\%Rechner2%\%vmxname2%" goto register2
:: :check3
::if exist "%ziel%\%Rechner3%\%vmxname3%" goto register3
:register1
call vmware-cmd -q -s register "%ziel%\%rechner1%\%vmxname1%"
call vmware-cmd -q "%ziel%\%rechner1%\%vmxname1%" start
if errorlevel 1 goto error-cmd
echo ==} Die VM [%rechner1%] wurde wieder gestartet.
goto check2
:register2
call vmware-cmd -q -s register "%ziel%\%rechner2%\%vmxname2%
call vmware-cmd -q "%ziel%\%rechner2%\%vmxname2%" start
if errorlevel 1 goto error-cmd
echo ==} Die VM [%rechner2%] wurde wieder gestartet.
::goto check3
:: :register3
::call vmware-cmd -q -s register "%ziel%\%rechner3%\%vmxname3%
::call vmware-cmd -q "%ziel%\%rechner3%\%vmxname3%" start
if errorlevel 1 goto error-cmd
::echo ==} Die VM [%rechner3%] wurde wieder gestartet.
:: ############# Log-Datei erzeugen #############
SET endzeit=%TIME:~0,8%
::Aktion an Logdatei anhängen, dabei aber bitte neue Logeinträge an den Loganfang setzen!
if NOT exist %logablage%%logdatei% goto loganlegen
if exist %logablage%%logdatei% goto logweiter
:loganlegen
echo. >> %logablage%%logdatei%
if errorlevel 1 goto error-log
:logweiter
CD %logablage%
if errorlevel 1 goto error-log
echo Start: %startzeit% (%date%) # Ende: %endzeit% (%date%) >> c:\logneu.txt
TYPE %logablage%%logdatei% >> c:\logneu.txt
DEL %logablage%%logdatei%
REN c:\logneu.txt %logdatei%
if errorlevel 1 goto error-log
cls
echo.
echo #########################################
echo # Alle VMs wurden wieder gestartet
echo #
echo # Logdatei unter %logablage%%logdatei%
echo #
echo # Startzeit: %startzeit% (%date%)
echo # Endzeit: %endzeit% (%date%)
echo #########################################
echo.
Goto ende
:: ############# Fehlerbehandlung #############
:: Falls Fehler beim Aufruf von vmware-cmd auftreten, Meldung machen
:error-cmd
echo.
echo !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
echo.
echo Ein Fehler ist aufgetreten!
echo vmware-cmd wurde nicht gefunden oder
echo sein Speicherort ist nicht im
echo Windows-PATH eingetragen!
echo.
echo !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
echo.
Goto ende
:: Falls Fehler beim Speichern der Log-Datei auftreten, Meldung machen
:error-log
echo.
echo !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
echo.
echo Ein Fehler ist aufgetreten!
echo Die Logdatei konnte nicht korrekt
echo erzeugt werden. Bitte Speicherorte und
echo Variablen am Batchanfang überprüfen.
echo Evtl. keine Schreibrechte auf %logablage%?
echo.
echo !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
echo.
:: ############# Ende #############
:ende
::Benutzer-Tastendruck zum Beenden, eventuell für automatischen Betrieb auskommentieren
pause