diff --git a/README.md b/README.md index 8b2cb8b..743a1b5 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,3 @@ # LogWert -### Anforderungen - -reine Auswertung einer Logdatei -auffassen. Das Ergebnis wird dann allerdings weiterverarbeitet. Die -Skripte schicke ich Dir mal als ZIP. - -Die Auswertung soll vor Erzeugung der Email passieren -(shares_spiegeln_und_sichern.cmd), da müsste auch schon irgendwo ein -Platzhalterkommentar stehen… +Fasst die RoboCopy Log's zusammen diff --git a/Skripte_V1.2_5.zip b/Skripte_V1.2_5.zip deleted file mode 100644 index ae8d343..0000000 Binary files a/Skripte_V1.2_5.zip and /dev/null differ diff --git a/logwert.cmd b/logwert.cmd deleted file mode 100644 index 1114427..0000000 --- a/logwert.cmd +++ /dev/null @@ -1,235 +0,0 @@ -@echo off -setlocal enabledelayedexpansion -rem ############################################################## -rem ## ## -rem ## logwert.cmd version. 1.2 ## -rem ## ## -rem ## Dies ist ein Hilfsscript fuer _shares_spiegeln.bat ## -rem ## Es wertet die Robologfile aus und fast diese zusammen ## -rem ## ## -rem ## @param %1 Pfadangabe-Logdatei ## -rem ## ## -rem ## @author: Martin.Huber@stbaro.bayern.de ## -rem ## ## -rem ############################################################## - -rem Einstellungen - -rem Dividierender Faktor der Groe�enausgabe (GB=1073741824,...) -set Log_Copy_Size_Einheit=1073741824 - - -rem ########################################################################################## -rem ########################### Beginn des eigendlichen Programms ############################ -rem ########################################################################################## - -rem -rem Hilfsvariablen NICHT editieren -rem - -set Log_Path=%1 -set Log_Copy_errors=0 -set Log_Copy_Size=0 -set Log_Copy_real_Size=0 -set Log_Copy_item=0 -set Log_Copy_real_item=0 - -rem ########################################################################################## - -:Start - -rem pruefen ob auszuwertendes Logfile Existiert -if not exist "%Log_Path%" set errorlevel=1&echo Wrong Log Path&goto exit - -for /f "delims=# tokens=3" %%c in ('echo %random%') do call :WichCase Dauer xy - -rem Logfile Auswerten -rem Jede Zeile mit !!!MAIN!!! einzeln Auswerten -for /f "tokens=*" %%a in (%Log_Path%) do call :Main %%a - -rem Umrechnen und Runden der Gr��enausgabe -call :calc "%Log_Copy_Size%/%Log_Copy_Size_Einheit%" Log_Copy_Size -set result= -call :round %Log_Copy_Size% -set Log_Copy_Size=%result% -call :calc "%Log_Copy_real_Size%/%Log_Copy_Size_Einheit%" Log_Copy_real_Size -set result= -call :round %Log_Copy_real_Size% -set Log_Copy_real_Size=%result% - - -echo Insgesamt: %Log_Copy_real_item% von %Log_Copy_item% Dateien kopiert, %Log_Copy_errors% Fehler, %Log_Copy_real_Size% g von %Log_Copy_Size% g kopiert -set "result=%Log_Copy_real_item% von %Log_Copy_item% Dateien kopiert, %Log_Copy_errors% Fehler, %Log_Copy_real_Size% g von %Log_Copy_Size% g kopiert" -rem bis drei stellen nach dem komma -rem 4 ziffern -rem g -goto Exit - -Rem ############################################################################################ - -Rem Zeilenweise Auswertung -:Main -set Log_Line=%* - -Rem Entfernen Problematischer Zeichen und setzen des Trennzeichens (#) -set Log_Line=%Log_Line:"=#% -set Log_Line=%Log_Line:,=#% -set Log_Line=%Log_Line:)=+% -set Log_Line=%Log_Line:(=+% - -rem Abschnitte einzeln weiter Auswerten -for /f "delims=# tokens=2" %%b in ('echo %Log_Line%') do ( - set tempvar=%%b - call :WichCase !tempvar! -) -for /f "delims=# tokens=3" %%c in ('echo %Log_Line%') do call :WichCase %%c -for /f "delims=# tokens=4" %%d in ('echo %Log_Line%') do call :WichCase %%d -for /f "delims=# tokens=5" %%e in ('echo %Log_Line%') do call :WichCase %%e - - -goto Exit - -Rem ################################################################################################## - -:WichCase - -Rem herausfinden der Informations Art (Item, Error, Size) -rem und starten der zugehoerigen auswerte Funktion - -set var_a=%* -if not defined var_a goto exit - -Rem Lehre Ordner werden so uebersprungen -for /f "tokens=1" %%g in ('echo !var_a!') do if "%%g" == "Dauer" goto exit - -rem zaehlen der Dateien -for /f "tokens=1,3,4" %%h in ('echo !var_a!') do if "%%j" == "Dateien" ( - call :calc "%Log_Copy_item%+%%i" Log_Copy_item - call :calc "%Log_Copy_real_item%+%%h" Log_Copy_real_item - goto exit -) - -rem zaehlen der Fehler -for /f "tokens=1,2" %%i in ('echo !var_a!') do if "%%j" == "Fehler" ( - call :calc "%Log_Copy_errors%+%%i" Log_Copy_errors - goto exit -) - -rem aufrufen der additions Funktion der Groe�enangaben -for /f "tokens=1,2,4,5,6" %%k in ('echo !var_a!') do if "%%o" == "kopiert" ( - call :count_real_Size %%k %%l - call :count_Size %%m %%n - goto exit -) - -goto exit - -rem ############################################################################################### - -Rem erstellen aehnlicher Funktionen um "setlocal enabledelayedexpansion" zu Umgehen - -:count_real_Size - -set result= -call :convert_to_bytes %1 %2 result -call :calc "%result%+%Log_Copy_real_Size%" Log_Copy_real_Size -goto exit - - -:count_Size - -set result= -call :convert_to_bytes %1 %2 result -call :calc "%result%+%Log_Copy_Size%" Log_Copy_Size -goto exit - -rem ############################################################################################## - -rem konfertieren der unterschiedlichen Groe�enangaben in bytes (umrechnungseinheit= 1024) -rem b (=Bytes), k (=Kilobytes), m (=Megabytes), g (=Gigabytes) und t (=Terabytes) - -:convert_to_bytes -rem convert_to_bytes [zahl] [einheit] (r�ckgabe-variable) -set convert_to_bytes_zahl=%1 -set convert_to_bytes_einheit=%2 -set convert_to_bytes_var=%3 -if not defined convert_to_bytes_var set convert_to_bytes_var=result - -rem "Select Case convert_to_bytes_einheit" -goto :convert_to_bytes_%convert_to_bytes_einheit% -:convert_to_bytes_b -set %convert_to_bytes_var%=%convert_to_bytes_zahl% -goto exit -:convert_to_bytes_k -call :calc "%convert_to_bytes_zahl%*1024" %convert_to_bytes_var% -goto exit -:convert_to_bytes_m -call :calc "%convert_to_bytes_zahl%*1048576" %convert_to_bytes_var% -goto exit -:convert_to_bytes_g -call :calc "%convert_to_bytes_zahl%*1073741824" %convert_to_bytes_var% -goto exit -:convert_to_bytes_t -call :calc "%convert_to_bytes_zahl%*1099511627776" %convert_to_bytes_var% -goto exit -:convert_to_bytes_0 -echo Kein Sharezugriff! -set %convert_to_bytes_var%=0 - -goto exit - - -rem ############################################################################################### - -rem auslagern der Rechenfunktion in die PowerShell - -:calc -rem calc ["berechnung"] (r�ckgabe-variable) -set result=%1 -if not defined result goto exit - -rem herausfiltern unerlaubter Zeichen -set result=%result:,=.% -set result=%result:(=^(% -set result=%result:)=^)% -set result=%result:"=% - -set result=%result:[=^(% -set result=%result:]=^)% - -set var_name=%2 -if not defined var_name set var_name=result - -for /f %%a in ('powershell -C "%result%"') do set result=%%a -set result=%result:,=.% -set %var_name%=%result% -goto exit - -rem ############################################################################################# - -rem die Funktion round konnte nicht in die PowerShell ausgelagert werden, -rem da der befehl Klammern enth�llt! -rem Rundet immer auf zwei Stellen nach dem Komma - -:round -rem round [zahl] -set result=%* -if not defined result goto exit -set result=%result:,=.% -set result=%result:"=% - -call :calc "%result%*1000" result -set result=%result:.=#% -set result=%result:,=#% -for /f "delims=# tokens=1" %%a in ('echo %result%') do set result=%%a -set last_number=%result:~-1% -if "%last_number%" GTR "5" (set round_zahl=1) else (set round_zahl=0) -call :calc "%result:~,-1%+%round_zahl%" result -call :calc "%result%/100" result -set last_number= -set round_zahl= -goto exit - -rem ############################################################################################# - -:exit diff --git a/logwert.ps1 b/logwert.ps1 new file mode 100644 index 0000000..4b57649 --- /dev/null +++ b/logwert.ps1 @@ -0,0 +1,151 @@ + ############################################################## + ## ## + ## logwert.ps1 version. 1.0 ## + ## ## + ## Dies ist ein Hilfsscript fuer _shares_spiegeln.bat ## + ## und der Nachfolger des CMD-Scriptes "logwert.cmd", ## + ## Es wertet die Robologfile aus und fast diese zusammen. ## + ## ## + ## @parameter: [Pfad-Log1] [Pfad-Log2] [Pfad-Log3] ... ## + ## ## + ## @author: Martin.Huber@stbaro.bayern.de ## + ## ## + ############################################################## + + + + + +################################### Variablen Declaration ############################################### +[String]$Global:Log_Copy_Size_Einheit = "GB" + + +### Hilfsvariablen NICHT editieren ### + +[Double]$Global:zLog_Copy_errors = 0 +[Double]$Global:zLog_Copy_Size = 0 +[Double]$Global:zLog_Copy_real_Size = 0 +[Double]$Global:zLog_Copy_item = 0 +[Double]$Global:zLog_Copy_real_item = 0 + +################################### Functionen ########################################################## + +function Log_Start ([String]$sLogPfad){ + If(Test-Path $sLogPfad) { + $tmp = "" + $tmp = Get-Content $sLogPfad + $tmp | ForEach-Object { Log_Main $_ } + } +} + +function Log_Main ([String]$sLine){ +#Zeilenweise auswertung + +while(" ".Equals($sLine.Substring(0,1))) {$sLine = $sLine.Substring(1, $sLine.Length - 1)} +while("`"".Equals($sLine.Substring(0,1))) {$sLine = $sLine.Substring(1, $sLine.Length - 1)} +while(" ".Equals($sLine.Substring($sLine.Length - 1,1))) {$sLine = $sLine.Substring(0, $sLine.Length - 1)} + +#Trenn Zeichen Setzen +$sLine = $sLine.replace("`"", "#") +$sLine = $sLine.replace(",", "#") +$sLine = $sLine.replace(":", "#") + +#Entferne Problemeverursachende Zeichen +$sLine = $sLine.replace(")", "+") +$sLine = $sLine.replace("(", "+") + +$sLine.Split("#") | ForEach-Object { WichCase $_ } +} + +function WichCase ([String]$sTocken) { +$aTocken = "" +while(" ".Equals($sTocken.Substring(0,1))) {$sTocken = $sTocken.Substring(1, $sTocken.Length - 1)} #Lehrzeichen vor werten entvernen +while(" ".Equals($sTocken.Substring($sTocken.Length - 1,1))) {$sTocken = $sTocken.Substring(0, $sTocken.Length - 1)} #Lehrzeichen nach werten entvernen +while($sTocken.IndexOf(" ") -gt -1 ) {$sTocken = $sTocken.Replace(" ", " ")} #Mehrere hintereinander volgende Lehrzeichen entvernen + +$aTocken = $sTocken.Split(" ") + +# Count_Copy_errors +If("Fehler".Equals($aTocken[1])) { + [Double]$Global:zLog_Copy_errors = [Double]$Global:zLog_Copy_errors + $aTocken[0] + } + +# Count_Items +If("von".Equals($aTocken[1]) -and ("Dateien".Equals($aTocken[3]))) { + [Double]$Global:zLog_Copy_item = [Double]$Global:zLog_Copy_item + $aTocken[2] + [Double]$Global:zLog_Copy_real_item = [Double]$Global:zLog_Copy_real_item + $aTocken[0] + } + +# Count_Size +If("von".Equals($aTocken[2]) -and ("kopiert".Equals($aTocken[5])) ) { + [Double]$Global:zLog_Copy_Size = [Double]$Global:zLog_Copy_Size + (Calc_Bite_Sice $aTocken[3] $aTocken[4] b) + [Double]$Global:zLog_Copy_real_Size = [Double]$Global:zLog_Copy_real_Size + (Calc_Bite_Sice $aTocken[0] $aTocken[1] b) + } + +} #Übergabe der Zeile; Auswertung; Speicherung in Globale Variablen + +function Calc_Bite_Sice ([Double]$Wert, [String]$EinheitEingabe, [String]$EinheitAusgabe ) { + +#Calc_Bite_Sice: [Wert] [Einheit-Ausgabe] [Einheit-Eingabe] +# Wenn bei Einheit etwas anderes als KB,MB,GB,TB eingebeben Wird, Wird mit Bites gerechnet + +#fertieren der unterschiedlichen Groeßenangaben (umrechnungseinheit= 1024) +# b (=Bytes), k (=Kilobytes), m (=Megabytes), g (=Gigabytes) und t (=Terabytes) + + If("".Equals("$sWert") -and "0".Equals("$sWert")) {return 0} else { + + $EinheitEingabe = ($EinheitEingabe.substring(0,1)).replace("K","k") + $EinheitEingabe = ($EinheitEingabe.substring(0,1)).replace("M","g") + $EinheitEingabe = ($EinheitEingabe.substring(0,1)).replace("G","g") + $EinheitEingabe = ($EinheitEingabe.substring(0,1)).replace("T","g") + + $EinheitAusgabe = ($EinheitAusgabe.substring(0,1)).replace("K","k") + $EinheitAusgabe = ($EinheitAusgabe.substring(0,1)).replace("M","g") + $EinheitAusgabe = ($EinheitAusgabe.substring(0,1)).replace("G","g") + $EinheitAusgabe = ($EinheitAusgabe.substring(0,1)).replace("T","g") + + + If ( -not ("k".Equals("$EinheitAusgabe") -or "m".Equals("$EinheitAusgabe") -or "g".Equals("$EinheitAusgabe") -or "t".Equals("$EinheitAusgabe"))) {$EinheitAusgabe = "b"} + If ( -not ("k".Equals("$EinheitEingabe") -or "m".Equals("$EinheitEingabe") -or "g".Equals("$EinheitEingabe") -or "t".Equals("$EinheitEingabe"))) {$EinheitEingabe = "b"} + + switch("$EinheitEingabe") { + + "k" { $Wert = $Wert * 1024 } + + "m" {$Wert = $Wert * 1048576} + + "g" {$Wert = $Wert * 1073741824} + + "t" {$Wert = $Wert * 1099511627776} + + } + + switch("$EinheitAusgabe") { + + #"b" {$Wert = [math]::round($Wert, 0)} + + "k" {$Wert = $Wert / 1024} + + "m" {$Wert = $Wert / 1048576} + + "g" {$Wert = $Wert / 1073741824} + + "t" {$Wert = $Wert / 1099511627776} + + } + return $Wert + } +} #[Wert] [Einheit-Ausgabe] [Einheit-Eingabe] + +################################################################################### + +#for each param do start(param) +$args | ForEach-Object { Log_Start $_ } + +[String]$sLog_Copy_errors = "$Global:zLog_Copy_errors" +[String]$sLog_Copy_Size = [math]::round((Calc_Bite_Sice $Global:zLog_Copy_Size b $Global:Log_Copy_Size_Einheit), 2) +[String]$sLog_Copy_real_Size = [math]::round((Calc_Bite_Sice $Global:zLog_Copy_real_Size b $Global:Log_Copy_Size_Einheit), 2) +[String]$sLog_Copy_item = "$Global:zLog_Copy_item" +[String]$sLog_Copy_real_item = "$Global:zLog_Copy_real_item" + +echo "Insgesamt: $sLog_Copy_real_item von $sLog_Copy_item Dateien kopiert, $sLog_Copy_errors Fehler, $sLog_Copy_real_Size g von $sLog_Copy_Size g kopiert" \ No newline at end of file diff --git a/testlog.txt b/testlog.txt deleted file mode 100644 index b63bbd3..0000000 --- a/testlog.txt +++ /dev/null @@ -1,29 +0,0 @@ -"\\transit\e$\BACKUP" 0 von 7 Dateien kopiert, 0 Fehler, 0 m von 460.66 m kopiert, Dauer 00:00:00 -"\\c4u2\d$\4u2" 0 0 von 0 0 kopiert -"\\snusvintra\d$\Intranet" 137 von 12165 Dateien kopiert, 0 Fehler, 2.93 m von 10.382 g kopiert, Dauer 00:00:03 -"\\cinvent\c$\Program Files (x86)\FCS" 0 von 1607 Dateien kopiert, 0 Fehler, 0 m von 258.54 m kopiert, Dauer 00:00:00 -"\\snusvintra\d$\Logon" 0 von 6 Dateien kopiert, 0 Fehler, 0 k von 151.7 k kopiert, Dauer 00:00:00 -"\\c4u2\c$\4u2" 34 von 4736 Dateien kopiert, 0 Fehler, 1.07 m von 78.05 m kopiert, Dauer 00:00:01 -"\\iuk\c$\Program Files (x86)\MessPC" 0 von 16 Dateien kopiert, 0 Fehler, 0 m von 1.53 m kopiert, Dauer 00:00:00 -"\\snusvintra\d$\SQLData\BACKUP" 4 von 37 Dateien kopiert, 0 Fehler, 12.20 m von 94.24 m kopiert, Dauer 00:00:00 -"\\c4u2\c$\vemags_pdf" 12 von 1723 Dateien kopiert, 0 Fehler, 489.5 k von 244.23 m kopiert, Dauer 00:00:01 -"\\anwend\Anwendung" 76 von 90107 Dateien kopiert, 0 Fehler, 14.91 m von 48.885 g kopiert, Dauer 00:00:15 -"\\iuk\c$\Programme\Arexx" 5 von 62 Dateien kopiert, 0 Fehler, 1.04 m von 47.81 m kopiert, Dauer 00:00:00 -"\\backup\d$\Skripte" 19 von 87 Dateien kopiert, 0 Fehler, 286.4 k von 2.40 m kopiert, Dauer 00:00:00 -"\\cgzper\c$\k2\DATSIC" 0 von 57 Dateien kopiert, 0 Fehler, 0 g von 1.136 g kopiert, Dauer 00:00:00 -"\\backup\d$\Backup Exec\Catalogs" 0 von 6 Dateien kopiert, 0 Fehler, 0 m von 585.24 m kopiert, Dauer 00:00:00 -"\\cgzper\c$\k2\Mail" 0 von 13 Dateien kopiert, 0 Fehler, 0 k von 107.4 k kopiert, Dauer 00:00:00 -"\\backup\d$\Backup Exec\Data" 0 von 63 Dateien kopiert, 2 Fehler, 0 m von 52.12 m kopiert, Dauer 00:00:00 -"\\iuk\iuk\Programme" 0 von 7160 Dateien kopiert, 0 Fehler, 0 g von 13.846 g kopiert, Dauer 00:00:06 -"\\ckruper\c$\k2\DATSIC" 1 von 12 Dateien kopiert, 0 Fehler, 19.56 m von 264.46 m kopiert, Dauer 00:00:01 -"\\cdlgper\c$\k2\DATSIC" 1 von 8 Dateien kopiert, 0 Fehler, 17.11 m von 135.25 m kopiert, Dauer 00:00:01 -"\\ckruper\c$\k2\Mail" 0 von 11 Dateien kopiert, 0 Fehler, 0 k von 100.2 k kopiert, Dauer 00:00:00 -"\\cdlgper\c$\k2\Mail" 0 von 12 Dateien kopiert, 0 Fehler, 0 k von 100.5 k kopiert, Dauer 00:00:00 -"\\anwend\Projekte" 66 von 83896 Dateien kopiert, 0 Fehler, 119.70 m von 112.009 g kopiert, Dauer 00:00:29 -"\\iuk\iuk\Programme_StBV" 0 von 33461 Dateien kopiert, 0 Fehler, 0 g von 22.032 g kopiert, Dauer 00:00:14 -"\\cnuper\c$\k2\DATSIC" 0 von 19 Dateien kopiert, 0 Fehler, 0 m von 271.62 m kopiert, Dauer 00:00:00 -"\\cnuper\c$\k2\Mail" 0 von 13 Dateien kopiert, 0 Fehler, 0 k von 73.4 k kopiert, Dauer 00:00:00 -"\\n1v\etc$" 10 von 38 Dateien kopiert, 0 Fehler, 231.2 k von 351.4 k kopiert, Dauer 00:00:02 -"\\qnap2\Daten" 51 von 107479 Dateien kopiert, 0 Fehler, 49.00 m von 74.649 g kopiert, Dauer 00:01:04 -"\\n1v\daten$" 418 von 649517 Dateien kopiert, 0 Fehler, 264.78 m von 625.396 g kopiert, Dauer 00:29:28 -"\\n1v\home$" 490 von 162297 Dateien kopiert, 2 Fehler, 131.835 g von 302.056 g kopiert, Dauer 00:33:10