Prof. Hilfe für Backup per Drive Snapshot mit Batch
Hi Leute,
ich bin am verzweifeln. Habe mich versucht tief rein zu arbeiten und werde einfach nicht fertig, so wie es sein soll.
Ich brauch Jemanden, der sich mit Scripting gut auskennt und mit dem Programm Drive Snapshot. Folgendes will ich und habe ich bis dato geschafft:
1. Alles soll per Variablen zu lösen sein. Sehr flexibel, damit auch ein Server mal wieder hinzugefügt und entfernt werden kann. Funzt, dank "for /F "delims=" %%i in ("!serverlist!")".
2. Update der Snapshot.exe: wget lädt die neue Version herunter. Die alte wird abgespeichert, es wird die neue lizenziert und bei einem Fehler wird die alte Version zurück gesichert, damit das Backup ungestört weiter laufen kann. Eine Mail bzgl. dem fehlgeschlagenem Update wird trotzdem versendet. Funzt soweit komplett.
3. Anzahl der Snapshots: Ich kann es noch nicht komplett testen, weil das ganze Script noch nicht 100%ig funktioniert. Aber es soll mal so aussehen: Ich gebe die zahl 30 ein und ich bekomme ein Full-Snapshot und 29 differenzielle Snapshots. Ältere sollen gelöscht werden.
4. Eigentliche Snapshot: Wenn kein Full vorhanden ist, wird eines erstellt. Funzt!
5. Ich bekomme leider nicht alle Laufwerke gesichert. Sollte aber eigentlich weiter gehen...
6. Ich arbeite mit "logicaldisks"! bei beiden Windows Server 2008 funzt das ohne Probleme. Beim 2003er Server bleibt psexec einfach hängen. Also psexec startet in der Batch und versucht die Laufwerke zu ermitteln und das war es dann auch. Der Zeiger in der Batch blinkt nur freundlich. Diese Laufwerke wollte ich dann in eine Variable schreiben und Drive Snapshot soll anhand derer dann sichern.
7. Ich will pro Server nur eine Mail mit Log-Inhalt. Sollte von der Theorie her funktionieren!
Wer traut sich, wer kann mir helfen?
Code:
ich bin am verzweifeln. Habe mich versucht tief rein zu arbeiten und werde einfach nicht fertig, so wie es sein soll.
Ich brauch Jemanden, der sich mit Scripting gut auskennt und mit dem Programm Drive Snapshot. Folgendes will ich und habe ich bis dato geschafft:
1. Alles soll per Variablen zu lösen sein. Sehr flexibel, damit auch ein Server mal wieder hinzugefügt und entfernt werden kann. Funzt, dank "for /F "delims=" %%i in ("!serverlist!")".
2. Update der Snapshot.exe: wget lädt die neue Version herunter. Die alte wird abgespeichert, es wird die neue lizenziert und bei einem Fehler wird die alte Version zurück gesichert, damit das Backup ungestört weiter laufen kann. Eine Mail bzgl. dem fehlgeschlagenem Update wird trotzdem versendet. Funzt soweit komplett.
3. Anzahl der Snapshots: Ich kann es noch nicht komplett testen, weil das ganze Script noch nicht 100%ig funktioniert. Aber es soll mal so aussehen: Ich gebe die zahl 30 ein und ich bekomme ein Full-Snapshot und 29 differenzielle Snapshots. Ältere sollen gelöscht werden.
4. Eigentliche Snapshot: Wenn kein Full vorhanden ist, wird eines erstellt. Funzt!
5. Ich bekomme leider nicht alle Laufwerke gesichert. Sollte aber eigentlich weiter gehen...
6. Ich arbeite mit "logicaldisks"! bei beiden Windows Server 2008 funzt das ohne Probleme. Beim 2003er Server bleibt psexec einfach hängen. Also psexec startet in der Batch und versucht die Laufwerke zu ermitteln und das war es dann auch. Der Zeiger in der Batch blinkt nur freundlich. Diese Laufwerke wollte ich dann in eine Variable schreiben und Drive Snapshot soll anhand derer dann sichern.
7. Ich will pro Server nur eine Mail mit Log-Inhalt. Sollte von der Theorie her funktionieren!
Wer traut sich, wer kann mir helfen?
Code:
:- ********************************************************************************************
:-
:- Wird das Skript in der "Aufgabenplanung" hinterlegt, muss unter "Starten in (Optional):"
:- das "%workdir%" Verzeichniss eingetragen werden.
:-
:- ********************************************************************************************
:- --------------------------------------------------------------------------------------------
:- Variablen setzen (nicht vorhandene Verzeichnisse sind vorher zu erstellen!)
:- --------------------------------------------------------------------------------------------
setlocal enabledelayedexpansion
:- --------------------------------------------------------------------------------------------
:- Variablen wurden fürs Forum natürlich geändert!!!!
:- --------------------------------------------------------------------------------------------
set domain=domian
set user=Administrator
set password=Password123456
set mailserver=192.168.168.55
set maildomain=firma.com
set mailrecipient=mail@firma.com
set workdir=\\server01\it$\Snapshot
set logs=\\server01\it$\Snapshot\logs
set tools=\\server01\it$\Snapshot\tools
set serverlist=SERVER01,SERVER02,SERVER03
set countofsnapshots=7
set destination=\\backup\s$
:- --------------------------------------------------------------------------------------------
:- Snapshot Update: sichern, updaten, lizensieren
:- Bei Update Fehler: ruecksichern und benachrichtigen
:- --------------------------------------------------------------------------------------------
:snapshot_update
ren "%workdir%\snapshot.exe" snapshot_last.exe
"%tools%\wget\wget.exe" -t3 --retry-connrefused -w60 -T90 --no-cache -O"%workdir%\snapshot.exe" -o"%logs%\update.txt" "http://www.drivesnapshot.de/download/snapshot.exe"
"%workdir%\snapshot.exe" --register:"%workdir%\license.txt" >> "%logs%\update.txt"
if '%errorlevel%'=='0' goto update_success
copy "%workdir%\snapshot_last.exe" "%workdir%\snapshot.exe"
"%tools%\gbmail.exe" -v -to %mailrecipient% -h %mailserver% -from snapshot.update@%maildomain% -s "Snapshot-Meldung: Update fehlgeschlagen" -file "%logs%\update.txt"
:update_success
del "%workdir%\snapshot_last.exe"
:- --------------------------------------------------------------------------------------------
:- hash-Verzeichnisse anlegen
:- --------------------------------------------------------------------------------------------
:hash_create
for /F "delims=" %%i in ("!serverlist!") do for %%A in (%%i) do if not exist "\\%%A\c$\Snapshot_hash" md "\\%%A\c$\Snapshot_hash"
:- --------------------------------------------------------------------------------------------
:- COUNTOFSNAPSHOTS: Anzahl der Variable prüfen. Dateien älteren Datums werden gelöscht.
:- --------------------------------------------------------------------------------------------
:countofsnapshots
for /F "delims=" %%i in ("!serverlist!") do for %%A in (%%i) do for /F "skip=%countofsnapshots% delims=" %%j in ('dir "%destination%\%%A\*.sna" /A:-D /B /O:-D') do (del "%destination%\%%A\%%j")
:- --------------------------------------------------------------------------------------------
:- LOGICALDISKS: Anzahl der lokalen Laufwerke ermitteln und für eine vollständige Sicherung
:- in eine Variable schreiben.
:- --------------------------------------------------------------------------------------------
:logicaldisks
for /F "delims=" %%i in ("!serverlist!") do for %%A in (%%i) do "%tools%\psexec.exe" /accepteula \\%%A -u %domain%\%user% -p %password% -h cmd /c for /F "tokens=2 delims==" %%d in ('wmic logicaldisk where "drivetype=3" get name /format:value') do echo %%d
:- --------------------------------------------------------------------------------------------
:- SNAPSHOT FUL: vollständiges Images erstellen, wenn keines vorhanden ist oder wenn lt.
:- countofsnapshots das alte Images gelöscht wurde.
:- SNAPSHOT DIF: differentielles Image erstellen, wenn ein noch gültiges, vollständiges Image
:- gefunden und die Anzahl der countofsnapshots noch nicht erreicht wurde.
:- --------------------------------------------------------------------------------------------
:snapshot_complete
for /F "delims=" %%i in ("!serverlist!") do for %%A in (%%i) do "%tools%\psexec.exe" /accepteula \\%%A -u %domain%\%user% -p %password% -c -f -h %workdir%\snapshot.exe C: %destination%\%%A\$computername_$disk_$type.sna -L307200 --AllWriters --AutoBackupSize:512 --CreateDir --FullIfHashIsMissing -RWT --exclude:"\Windows\Memory.dmp","\Windows\Minidump","\Windows\Temp" -h"%SystemDrive%\Snapshot_hash\$computername_$disk.hsh" --LogFile:%logs%\$computername.txt && (
"%tools%\gbmail.exe" -v -to %mailrecipient% -h %mailserver% -from snapshot.%%A@%maildomain% -s "Snapshot-Meldung: Auftrag erfolgreich" -file "%logs%\%%A.txt"
) || (
"%tools%\gbmail.exe" -v -to %mailrecipient% -h %mailserver% -from snapshot.%%A@%maildomain% -s "Snapshot-Meldung: Auftrag fehlgeschlagen" -file "%logs%\%%A.txt"
)
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 245617
Url: https://administrator.de/contentid/245617
Ausgedruckt am: 06.11.2024 um 02:11 Uhr
3 Kommentare
Neuester Kommentar
Moin,
dann was soll das denn?
Das echo ist noch vom Test?
Evtl. läuft das unter 2003 so besser:
IMHO will 2k3 da "irgendeine Taste" gedrückt (jedenfalls hab ich das in meinem Snapshotscript so geschrieben - wird nen Grund haben)
edit
Ist so Schwachfug² - denn ich sehe nirgendwo, dass Du das Ziel des Backups selber vom Snapshot ausschliesst.
/edit
- pack das mal in Code Blöcke.
dann was soll das denn?
for /F "tokens=2 delims==" %%d in ('wmic logicaldisk where "drivetype=3" get name /format:value') do echo %%d
Evtl. läuft das unter 2003 so besser:
echo x|wmic logicaldisk where "drivetype=3" get name ^|find ":"
edit
set workdir=\\server01\it$\Snapshot
set serverlist=SERVER01
set serverlist=SERVER01
Ist so Schwachfug² - denn ich sehe nirgendwo, dass Du das Ziel des Backups selber vom Snapshot ausschliesst.
/edit