Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Robocopy Batch mit Mailversand von Blat auf Powershell umbauen

Frage Entwicklung Batch & Shell

Mitglied: nother

nother (Level 1) - Jetzt verbinden

12.10.2014, aktualisiert 11:12 Uhr, 1751 Aufrufe, 2 Kommentare

Hallo an alle!
Ich benötige mal wieder Hilfe beim Umbau eines Scripts. Bastla? Derwowußte?
Hintergrund ist der Verzicht auf externen Programmaufruf: Blat muss raus!
Habe schon diverse andere Powershell-Robocopy-Scripte gesehen und getestet, aber die Aufbereitung und die für meinereiner Übersichtliche Struktur dieser Batch möchte ich nicht mehr missen.
Außerdem sind meine Powershell Fähigkeiten sehr begrenzt!
Also geht es konkret um den letzten Abschnitt: Mailversand per Powershell.
Oder jemand ist in der Lage, die gesamte Batch per Powershell umzubauen.
Entscheidend ist für mich die Übersichtlichkeit!



01.
@ECHO OFF & SETLOCAL 
02.
::@ECHO OFF 
03.
::		------------------ Codepage ändern für Umlaute im Log -------------------- 
04.
chcp 1252 
05.
::		------------------ eventuell alte vorhandene Dateien löschen ------------- 
06.
if exist temp.txt del temp.txt 
07.
if exist logfile.log del logfile.log 
08.
::		------------------ allgemeine Variablen: Datum zerlegen ------------------ 
09.
for /F "tokens=1-3 delims=/. " %%a in ('date/T') do ( 
10.
    set "TT=%%a" 
11.
    set "MM=%%b" 
12.
    set "YYYY=%%c" 
13.
14.
set "mydate=%YYYY%-%MM%-%TT%" 
15.
::-------------------------------------------------------------------------------- 
16.
::		------------------ Variablen für den Mailer ------------------------------ 
17.
::-------------------------------------------------------------------------------- 
18.
set "mailsrv=Mailserver-Adresse" 
19.
set "mailuser=Mailuser" 
20.
set "mailuserPW=Passwort" 
21.
set "mailfrom=Mailadresse" 
22.
set "pathblat=C:\Program Files (x86)\Blat" 
23.
set "mailto=Wohin" 
24.
set "BCC=Wohin_noch" 
25.
set "body=temp.txt" 
26.
::		------------------ Netzlaufwerk verbinden ----------------- 
27.
::-------------------------------------------------------------------------------- 
28.
::net use M:\  
29.
::-------------------------------------------------------------------------------- 
30.
::-------------------------------------------------------------------------------- 
31.
::		------------------ Ab hier werden die Robocopy Parameter befüllt --------- 
32.
::		------------------ Variable Quelle ohne abschließendem \ ----------------- 
33.
::-------------------------------------------------------------------------------- 
34.
set "quelle=\\Quellpfad" 
35.
::-------------------------------------------------------------------------------- 
36.
::		------------------ Variable Zielverzeichnis ohne abschließendem \ -------- 
37.
::-------------------------------------------------------------------------------- 
38.
set "backuproot=\\Zielpfad" 
39.
::-------------------------------------------------------------------------------- 
40.
::		------------------ lege ein Monatsordner an ------------------------------ 
41.
::-------------------------------------------------------------------------------- 
42.
set "ziel=%BackupRoot%\%MM%\%mydate%" 
43.
::		------------------ Robocopy Parameter 1 ---------------------------------- 
44.
::		------------------ Was soll kopiert werden ------------------------------- 
45.
::		------------------ z.B. alle Worddokumente mit *.doc --------------------- 
46.
set "what=*.*" 
47.
::		------------------ Robocopy Parameter 2 ---------------------------------- 
48.
:: set "par=/S /COPY:DAT /FFT /R:1 /W:1 /TS /FP /NDL /TEE /NP /XF desktop.ini Thumbs.db /XD $RECYCLE.BIN" 
49.
::-------------------------------------------------------------------------------- 
50.
:: 
51.
:: Auflistung der genutzten und zusätzlich Sinnvollen Ergänzungs-Parameter ------- 
52.
:: Kopieroptionen: 
53.
:: /S :: Kopiert Unterverzeichnisse, jedoch keine leeren Unterverzeichnisse. 
54.
:: /COPY:copyflags:: Gibt an, welche Inhalte für Dateien kopiert werden sollen (der Standard ist "/COPY:DAT"). 
55.
::                  (Kopierflags : D=Daten, A=Attribute, T=Zeitstempel). 
56.
::                  (S=Sicherheit=NTFS-ACLs, O=Besitzerinformationen, U=Überwachungsinformationen). 
57.
:: /MIR :: Spiegelt eine Verzeichnisstruktur (Entspricht "/E" mit "/PURGE"). < Achtung bitte Schlau machen! Kann auch Daten im Zielverzeichnis löschen! 
58.
::-------------------------------------------------------------------------------- 
59.
set "par_copy=/S /COPY:DAT" 
60.
::-------------------------------------------------------------------------------- 
61.
:: Dateiauswahloptionen: 
62.
:: /A :: Kopiert nur Dateien mit dem "Archive"-Attribut. 
63.
:: /M :: Kopiert nur Dateien mit dem "Archive"-Attribut und setzt das Attribut zurück. 
64.
:: /XF Datei[Datei]:: Schließt Dateien aus, die mit den angegebenen Namen/Pfaden/Platzhaltern übereinstimmen. 
65.
:: /XD Verz.[Verz.]:: Schließt Verzeichnisse aus, die mit den angegebenen Namen/Pfaden übereinstimmen. 
66.
::-------------------------------------------------------------------------------- 
67.
set "par_exclf=/XF desktop.ini Thumbs.db *.pdf *.dmp" 
68.
set "par_excld=/XD $RECYCLE.BIN Updates Protokolle Install Listen MCP_Archivverzeichnis Kommunik" 
69.
::-------------------------------------------------------------------------------- 
70.
:: /FFT :: Geht von FAT-Uhrzeitangaben für Dateien aus (Granularität von zwei Sekunden). 
71.
set "par_ausw=/FFT" 
72.
::-------------------------------------------------------------------------------- 
73.
:: Wiederholungsoptionen: 
74.
:: /R:n :: Anzahl von Wiederholungsversuchen bei fehlerhaften Kopiervorgängen. Der Standardwert ist 1 Million. 
75.
:: /W:n :: Wartezeit zwischen Wiederholungsversuchen. Der Standardwert ist 30 Sekunden. 
76.
::-------------------------------------------------------------------------------- 
77.
set "par_read=/R:1 /W:1" 
78.
::-------------------------------------------------------------------------------- 
79.
:: Protokollierungsoptionen : 
80.
:: /L   :: Listet nur auf. Es werden keine Kopiervorgänge ausgeführt, Zeitstempel erstellt oder Dateien gelöscht. 
81.
:: 		:: Diese Option ist besonders Sinnvoll zum Testen! 
82.
:: /X   :: Meldet alle zusätzlichen Dateien, nicht nur die ausgewählten Dateien. 
83.
:: /V   :: Erstellt eine ausführliche Ausgabe mit ausgelassenen Dateien. 
84.
:: /TS  :: Schließt Zeitstempel von Quelldateien in die Ausgabe ein. 
85.
:: /FP  :: Schließt den vollständigen Pfadnamen von Dateien in die Ausgabe ein. 
86.
:: /NDL :: Keine Verzeichnisliste - Verzeichnisnamen werden nicht protokolliert. 
87.
:: /ETA :: Zeigt die ungefähre Empfangszeit der kopierten Dateien an. Sinnvoll im Netzwerk mit > 
88.
:: /TEE :: Gibt Daten in das Konsolenfenster und die Protokolldatei aus. 
89.
:: /NP  :: Kein Status - der Prozentsatz kopierter Elemente wird nicht angezeigt. 
90.
::-------------------------------------------------------------------------------- 
91.
set "par_prot=/TS /FP /NDL /TEE /NP" 
92.
::-------------------------------------------------------------------------------- 
93.
::-------------------------------------------------------------------------------- 
94.
::		------------------ Bis hier werden die Robocopy Parameter befüllt -------- 
95.
::-------------------------------------------------------------------------------- 
96.
::		------------------ Logfile für Robocopy ---------------------------------- 
97.
if not exist %BackupRoot%\Logs mkdir %BackupRoot%\Logs 
98.
set "logfile=%BackupRoot%\Logs\%mydate%.log" 
99.
set "log=/LOG:%logfile%" 
100.
::-------------------------------------------------------------------------------- 
101.
::		------------------ Attribut am 01. des Monats zurücksetzen --------------- 
102.
::		------------------ den Parameter /A durch /M ersetzen -------------------- 
103.
::		------------------ Vollständige Sicherung und Attrib /A raus ------------- 
104.
::		------------------ Darauffolgende Tage werden differentiell gesichert ---- 
105.
:: Dateiauswahloptionen: 
106.
:: /A  :: Kopiert nur Dateien mit dem "Archive"-Attribut. 
107.
:: /M  :: Kopiert nur Dateien mit dem "Archive"-Attribut und setzt das Attribut zurück. 
108.
:: über die if Abfrage wird am XX des Monats (in diesem Fall am 01.) das Archiv-Attribut neu gesetzt 
109.
::-------------------------------------------------------------------------------- 
110.
if %TT%==01 ( 
111.
    attrib +a "%quelle%\*.*" /s /d 
112.
    set "par=/M %par%" 
113.
    ping localhost -n 9 >nul 
114.
) else ( 
115.
    set "par=/A %par%" 
116.
117.
::-------------------------------------------------------------------------------- 
118.
::		------------------ Der eigentliche Robocopy-Aufruf ----------------------- 
119.
::-------------------------------------------------------------------------------- 
120.
robocopy.exe "%quelle%" "%ziel%" %what% %par% %par_copy% %par_exclf% %par_excld% %par_ausw% %par_read% %par_prot% %log% 
121.
::-------------------------------------------------------------------------------- 
122.
::		------------------ Errorlevel von Robocopy überprüfen -------------------- 
123.
set "err=%errorlevel%" 
124.
if %err%==16 set "betreff=FATAL ERROR" 
125.
if %err%==15 set "betreff=OKCOPY + FAIL + MISMATCHES + XTRA" 
126.
if %err%==14 set "betreff=FAIL + MISMATCHES + XTRA" 
127.
if %err%==13 set "betreff=OKCOPY + FAIL + MISMATCHES" 
128.
if %err%==12 set "betreff=FAIL + MISMATCHES" 
129.
if %err%==11 set "betreff=OKCOPY + FAIL + XTRA" 
130.
if %err%==10 set "betreff=FAIL + XTRA" 
131.
if %err%==9  set "betreff=OKCOPY + FAIL" 
132.
if %err%==8  set "betreff=FAILED COPIES" 
133.
if %err%==7  set "betreff=OKCOPY + MISMATCHES + XTRA" 
134.
if %err%==6  set "betreff=MISMATCHES + XTRA" 
135.
if %err%==5  set "betreff=OKCOPY + MISMATCHES" 
136.
if %err%==4  set "betreff=MISMATCHES" 
137.
if %err%==3  set "betreff=Copy successful ^& EXTRA Files deleted" 
138.
if %err%==2  set "betreff=EXTRA Files deleted" 
139.
if %err%==1  set "betreff=Copy successful" 
140.
if %err%==0  set "betreff=-- Nothing to do --" 
141.
::		------------------ Bestimmte Zeilen auslesen ----------------------------- 
142.
::		------------------ Dieses ist nur für die Mailzusammenfassung ------------ 
143.
ping localhost -n 5 >nul 
144.
find /i "Gestartet:" %Logfile% >> temp.txt 
145.
find /i "Quelle :" %Logfile% >> temp.txt 
146.
find /i "Ziel :" %Logfile% >> temp.txt 
147.
find /i "Optionen:" %Logfile% >> temp.txt 
148.
echo. >> temp.txt 
149.
echo ----------------------------------------------------------------------------- >> temp.txt 
150.
find /i "Der Prozess" %Logfile% >> temp.txt 
151.
echo ----------------------------------------------------------------------------- >> temp.txt 
152.
find /i "Insgesamt" %Logfile% >> temp.txt 
153.
find /i "Verzeich.:" %Logfile% >> temp.txt 
154.
find /i "Dateien:" %Logfile% >> temp.txt 
155.
find /i "Bytes:" %Logfile% >> temp.txt 
156.
echo ----------------------------------------------------------------------------- >> temp.txt 
157.
find /i "Zeiten:" %Logfile%  >> temp.txt 
158.
find /i "Beendet:" %Logfile% >> temp.txt 
159.
type temp.txt | find /i /v "%Logfile%" > temp2.txt 
160.
del temp.txt 
161.
ren temp2.txt temp.txt 
162.
echo. >> temp.txt 
163.
echo. >> temp.txt 
164.
ping localhost -n 9 >nul 
165.
::-------------------------------------------------------------------------------- 
166.
::		------------------ Bestimmte Zeilen auslesen Ende ------------------------ 
167.
::-------------------------------------------------------------------------------- 
168.
::		------------------ Wenn Errorlevel kleiner oder gleich eins, dann -------- 
169.
if %err% leq 1 ( 
170.
::		------------------ Mailer1 Zusammenfassung versenden --------------------- 
171.
    "%pathblat%\blat.exe" %body% -to %mailto% -bcc %BCC% -server %mailsrv% -debug -timestamp -subject "%betreff%" 
172.
) else ( 
173.
::		------------------ Mailer2 für Fehler und komplettes Logfile ------------- 
174.
::		------------------ Wenn Errorlevel größer eins, dann -------- 
175.
    "%pathblat%\blat.exe" %body% -attach %Logfile% -to %mailto% -bcc %BCC% -server %mailsrv% -debug -timestamp -subject "%betreff%" 
176.
177.
::-------------------------------------------------------------------------------- 
178.
::		------------------ Letzten 5 Versionen behalten, Rest löschen! ----------- 
179.
::for /f "skip=5" %%i in ('dir /b/o-D/ad/tc "%backuproot%\%MM%\????-??-??"') do rd /s /q "%backuproot%\%MM%\%%i" 
180.
::pause 
181.
exit 
182.
 
Mitglied: colinardo
LÖSUNG 12.10.2014, aktualisiert 15.12.2014
Moin nother,
in Powershell umgesetzt und grob angetestet könnte dies so aussehen:
01.
# ---------- VARIABLEN ------------ 
02.
 
03.
$PATH_QUELLE = 'C:\Quelle' 
04.
$PATH_BACKUPROOT = '\\Server\Share\Backup' 
05.
$FILE_FILTER = '*.*' 
06.
$PATH_LOGS = "$PATH_BACKUPROOT\Logs" 
07.
 
08.
# Mail Variablen ------------ 
09.
$mailSMTP = 'smtp.domain.de' 
10.
$mailUSER = 'USERNAME' 
11.
$mailPASS  = 'GEHEIM' 
12.
$mailFROM = 'absender@domain.de' 
13.
$mailTO = 'empfaenger@domain.de' 
14.
$mailBCC = 'empfaenger2@domain.de' 
15.
 
16.
# ---------- ENDE VARIABLEN -------------- 
17.
 
18.
# Datum formatieren 
19.
$datum = get-date -Format 'yyyy-MM-dd' 
20.
$monat = get-date -Format 'MM' 
21.
 
22.
# Pfad zum aktuellen Backup 
23.
$pathBackup = "$PATH_BACKUPROOT\$monat\$datum" 
24.
 
25.
# Pfad für das Logfile 
26.
$pathLogfile = "$PATH_LOGS\$datum.log" 
27.
 
28.
# Ordner anlegen falls sie nicht existieren 
29.
if(!(Test-Path $pathBackup)){md $pathBackup | out-null} 
30.
if(!(Test-Path $PATH_LOGS)){md $PATH_LOGS | out-null} 
31.
 
32.
# Robocopy Parameter 
33.
$parMODE = if((get-date).Day -eq 1){"/M"}else{"/A"} 
34.
$parCOPY = '/S /COPY:DAT' 
35.
$parEX_FILE = '/XF desktop.ini Thumbs.db *.pdf *.dmp' 
36.
$parEX_DIR = '/XD $RECYCLE.BIN Updates Protokolle Install Listen MCP_Archivverzeichnis Kommunik' 
37.
$parAUSW = '/FFT' 
38.
$parREAD = '/R:1 /W:1' 
39.
$parPROTO = '/TS /FP /NDL /TEE /NP' 
40.
$parLOG = "/LOG:$pathLogfile" 
41.
 
42.
# ARCHIV BIT setzen wenn 1. des Monats 
43.
if ($parMODE -eq '/M'){ 
44.
    write-host "1. des Monats, setze Archiv-Attribute in der Quelle" -ForegroundColor Cyan 
45.
    attrib +a "$PATH_QUELLE\*.*" /s /d 
46.
47.
 
48.
write-host "Starte Robocopy Prozess ..." 
49.
# Robocopy Action 
50.
robocopy.exe """$PATH_QUELLE"" ""$pathBackup"" $FILE_FILTER $parMODE $parCOPY $parEX_FILE $parEX_DIR $parAUSW $parREAD $parPROTO $parLOG" | out-null 
51.
# ---------------- 
52.
# Exit-Code von Robocopy speichern 
53.
$ROBOCOPY_ERRORCODE = $LASTEXITCODE 
54.
 
55.
# Fehlerlisten-Array von Robocopy 
56.
$ROBOCOPY_ERRORLIST = @('-- Nothing to do --','Copy successful','Extrafiles deleted','Copy successful & EXTRA Files deleted','MISMATCHES','OKCOPY + MISMATCHES','MISMATCHES + XTRA','OKCOPY + MISMATCHES + XTRA','FAILED COPIES','OKCOPY + FAIL','FAIL + XTRA','OKCOPY + FAIL + XTRA','FAIL + MISMATCHES','OKCOPY + FAIL + MISMATCHES','FAIL + MISMATCHES + XTRA','OKCOPY + FAIL + MISMATCHES + XTRA','FATAL ERROR') 
57.
# Mail Betreff setzen 
58.
$mailSUBJECT = $ROBOCOPY_ERRORLIST[$ROBOCOPY_ERRORCODE] 
59.
 
60.
$ROBOCOPY_OUTPUT = (gc $pathLogfile) 
61.
# Mail Body setzen 
62.
$mailBODY = @() 
63.
$mailBODY += $ROBOCOPY_OUTPUT | ?{$_ -match 'Gestartet:|Quelle :|Ziel :|Optionen:' } 
64.
$mailBODY += '-'*70 
65.
$mailBODY += $ROBOCOPY_OUTPUT | ?{$_ -match 'Der Prozess'} 
66.
$mailBODY += '-'*70 
67.
$mailBODY += $ROBOCOPY_OUTPUT | ?{$_ -match 'Insgesamt|Verzeich\.:|Dateien:|Bytes:'} 
68.
$mailBODY += '-'*70 
69.
$mailBODY += $ROBOCOPY_OUTPUT | ?{$_ -match 'Zeiten:|Beendet:'} 
70.
$mailBody = $mailBODY | out-string 
71.
 
72.
# Mails verschicken 
73.
if ($ROBOCOPY_ERRORCODE -le 1){ 
74.
    write-host  "Robocopy war erfolgreich, versende Zusammenfassungen via Mail..." -ForegroundColor Green 
75.
    Send-MailMessage -from $mailFROM -To $mailTO -Bcc $mailBCC -Subject $mailSUBJECT -Body $mailBODY -SmtpServer $mailSMTP -Credential (New-Object pscredential $mailUSER,(ConvertTo-SecureString -AsPlainText $mailPASS -Force)) 
76.
 
77.
}else{ 
78.
    write-host "Robocopy hat Fehler gemeldet, Versende Mail mit Logfile ..." -ForegroundColor RED 
79.
    Send-MailMessage -from $mailFROM -To $mailTO -Bcc $mailBCC -Subject $mailSUBJECT -Body $mailBODY -SmtpServer $mailSMTP -Attachments $pathLogfile -Credential (New-Object pscredential $mailUSER,(ConvertTo-SecureString -AsPlainText $mailPASS -Force)) 
80.
81.
 
82.
# Die letzten 5 Backups beibehalten 
83.
write-host "Cleanup ..." -ForegroundColor Cyan 
84.
dir "$PATH_BACKUPROOT\$monat\????-??-??" | ?{$_.PSIsContainer} | sort CreationTime -Descending | select -Skip 5 | Remove-Item -Force 
85.
 
86.
write-host "Script beendet" -ForegroundColor Green
Viel Spaß
Grüße Uwe

Falls der Beitrag gefällt, seid so nett und unterstützt mich durch eine kleine Spende / If you like my contribution please support me and donate
Bitte warten ..
Mitglied: nother
12.10.2014 um 15:59 Uhr
Respekt! Getestet und funktioniert auf anhieb!
Habe nur -Credential auskommentiert weil ich die nicht benötige...
You made my day!

Vielen Dank für die Mühe

nother
Bitte warten ..
Neuester Wissensbeitrag
Microsoft

Lizenzwiederverkauf und seine Tücken

(5)

Erfahrungsbericht von DerWoWusste zum Thema Microsoft ...

Ähnliche Inhalte
Batch & Shell
gelöst Powershell oder Batch-Task: Kopiere Datei x mal und benenne diese um (2)

Frage von Lorderich zum Thema Batch & Shell ...

Entwicklung
gelöst Mit Batch,VBS,Powershell Windows einrichten (1)

Frage von Justin98 zum Thema Entwicklung ...

Batch & Shell
Google drive komplexer upload per batch oder powershell (6)

Frage von functionstrut zum Thema Batch & Shell ...

Windows Tools
gelöst Powershell Befehle aus Batch-Datei falsch überetzt? (2)

Frage von Chillministrator zum Thema Windows Tools ...

Heiß diskutierte Inhalte
LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (17)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Windows Netzwerk
Windows 10 RDP geht nicht (16)

Frage von Fiasko zum Thema Windows Netzwerk ...

Windows Server
Outlook Verbindungsversuch mit Exchange (15)

Frage von xbast1x zum Thema Windows Server ...