zeusplanet
Goto Top

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:

:- ********************************************************************************************
:- 
:- 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"
   )

Content-Key: 245617

Url: https://administrator.de/contentid/245617

Printed on: April 19, 2024 at 18:04 o'clock

Member: Nr60730
Nr60730 Aug 05, 2014 updated at 16:35:06 (UTC)
Goto Top
Moin,

  • 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  
Das echo ist noch vom Test?

Evtl. läuft das unter 2003 so besser:
echo x|wmic logicaldisk where "drivetype=3" get name ^|find ":"  
IMHO will 2k3 da "irgendeine Taste" gedrückt (jedenfalls hab ich das in meinem Snapshotscript so geschrieben - wird nen Grund haben)

edit
set workdir=\\server01\it$\Snapshot
set serverlist=SERVER01

Ist so Schwachfug² - denn ich sehe nirgendwo, dass Du das Ziel des Backups selber vom Snapshot ausschliesst.

/edit
Member: zeusplanet
zeusplanet Aug 05, 2014 at 20:15:08 (UTC)
Goto Top
Nabend,

sorry, dass ich keine Code-Blöcke verwendet hatte. Aber jetzt hast es ja schon durch gelesen...

for /F "tokens=2 delims==" %%d in ('wmic logicaldisk where "drivetype=3" get name /format:value') do echo %%d  

Wie was soll das? Verstehe deine Frage nicht ganz. Ist zum ermitteln der Laufwerksbuchstaben gewesen. Unter 2008 funktioniert das einwandfrei. 2003er Server wie gesagt muckt hierbei.

Ja, der echo war hier noch vom Test.

Ich habe deinen Code eingefügt. Bekomme als Meldung, auch in einer leeren, einfachen Batch mit nur deinem Ausdruck die Meldung: Ungültiger GET-Ausdruck.

Schwachfug²??? Das ist nicht das Ziel, sondern nur das Arbeitsverzeichniss vom Snapshot im welchem die Anwendung und die Logs liegen.


Danke erst einmal. Kann das alles natürlich, wenn gewünscht, nochmal in Code-Blöcke einfügen.
Gute Nacht!
Member: zeusplanet
zeusplanet Aug 08, 2014 at 09:06:13 (UTC)
Goto Top
Hallo Zusammen nochmal,

kann mir keiner helfen? Also momentan stehe ich an folgender Situation fest:

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  

Damit versuche ich von allen Server lt. serverlist die Partitionen auszulesen. Das echo ist aktuell nur für einen Test. Die Laufwerke sollen später am besten pro Server in eine Variable geschrieben werden.

Problem bis dato: Bei den 2008er Server funktioniert obige Anforderung. Beim 2003er Server hängt psexec einfach. Cursor blinkt fröhlich. Es geht nicht weiter. Gibt es eine bessere Möglichkeit? Der vorgeschlagene Ausdruck von Nr60730 bringt mir leider im command-prompt nur einen Get-Fehler.