Kuddel071089 9 Geschrieben 28. Juni 2018 Melden Teilen Geschrieben 28. Juni 2018 Hallo zusammen, ich synchronisiere bei mir Täglich meine Daten von einem NAS auf ein anderes mit Robocpy. Jetzt würde ich in der Ergebnismail gern die kopierten Daten ausgeben. Im log sieht es ja bekanntlich so aus: Insgesamt KopiertšbersprungenKeine šbereinstimmung FEHLER Extras Verzeich.: 1811 0 0 0 0 0 Dateien: 20429 0 20429 0 0 0 Bytes: 5.944 t 0 5.944 t 0 0 0 Zeiten: 0:02:22 0:00:00 0:00:00 0:02:22 Ich hab jetzt versucht, die kopierten Bytes auszuschneiden. Leider ohne Erfolg. Aktuell bekomme ich zumindest die Zeile ausgeschnitten, die ich weiterarbeiten möchte: Bytes: 5.944 t 0 5.944 t 0 0 0 Wie kann ich jetzt die kopierten Bytes, in diesem Fall 0 rasufiltern? Danke schon einmal Zitieren Link zu diesem Kommentar
BOfH_666 577 Geschrieben 28. Juni 2018 Melden Teilen Geschrieben 28. Juni 2018 Vielleicht zeigst Du erstmal, was Du bisher hast. Nicht dass wir Dir jetzt eine Powershell-Lösung anbieten, Du aber mit Erlang unterwegs bist ... oder so ... Zitieren Link zu diesem Kommentar
Kuddel071089 9 Geschrieben 28. Juni 2018 Autor Melden Teilen Geschrieben 28. Juni 2018 $temp = "K:\temp.txt" $logdatei = Get-content K:\bas_backup_log.txt | Select-Object -Last 4 $logdatei | Out-File -FilePath $temp $logdatei = Get-Content $temp | Select-Object -First 1 $logdatei Remove-Item $temp Zitieren Link zu diesem Kommentar
BOfH_666 577 Geschrieben 28. Juni 2018 Melden Teilen Geschrieben 28. Juni 2018 (bearbeitet) OK ... das sieht wirklich nicht nach großem Erfolg aus. .... .... aber dafür hast Du ja uns ... ... ich hab grad mal gesucht, ich hatte mal eine Funktion gebaut, die robocopy benutzt, um die Anzahl der Dateien und Unterodner in einem gegebenen Verzeichnis und deren Gesamtgröße ermittelt. Daraus hier dann der SChnipsel um die Werte aus dem Log zu fräsen: $logdatei | Where-Object {"$_" -match "(Dateien|Files\s)\:\s+(\d+)\s"} | Out-Null $AnzahlDateien = "{0,9:0,0}" -f [INT]$Matches[2] $logdatei | Where-Object {"$_" -match "(Verzeich\.|Dirs\s)\:\s+(\d+)\s"} | Out-Null $AnzahlUnterOrdner = "{0,10:0,0}" -f [INT]$Matches[2] $Groesse = "{0,12:n2}" -f [math]::Round((($logdatei | Where-Object {$_ -match "Bytes"}).trim().split(" ")[1]) / 1MB , 2) #endregion #region Erzeugen des Ausgabeobjekts [PSCustomObject]@{ "Subfolders" = $AnzahlUnterOrdner "FileCount" = $AnzahlDateien "Size (MB)" = $Groesse } Probier ob's passt ... es sollte mit deutschem und englishem robocopy log klar kommen Edit: Achso ... was ich noch vergessen habe .... wichtig!!! damit das funktioniert, musst Du robocopy mit dem SChalter /bytes aufrufen!!!! bearbeitet 28. Juni 2018 von BOfH_666 Zitieren Link zu diesem Kommentar
mwiederkehr 373 Geschrieben 28. Juni 2018 Melden Teilen Geschrieben 28. Juni 2018 Für .NET gibt es einen Wrapper, der die Ausgabe analysiert und zur Verfügung stellt: https://github.com/tjscience/RoboSharp. Dieser sollte sich mit PowerShell auch verwenden lassen, bedinge aber grössere Änderungen am Script. Dafür könnte man den Status anzeigen, auf Fehler reagieren etc. Zitieren Link zu diesem Kommentar
Kuddel071089 9 Geschrieben 28. Juni 2018 Autor Melden Teilen Geschrieben 28. Juni 2018 vor 1 Stunde schrieb BOfH_666: OK ... das sieht wirklich nicht nach großem Erfolg aus. .... .... aber dafür hast Du ja uns ... ... ich hab grad mal gesucht, ich hatte mal eine Funktion gebaut, die robocopy benutzt, um die Anzahl der Dateien und Unterodner in einem gegebenen Verzeichnis und deren Gesamtgröße ermittelt. Daraus hier dann der SChnipsel um die Werte aus dem Log zu fräsen: $logdatei | Where-Object {"$_" -match "(Dateien|Files\s)\:\s+(\d+)\s"} | Out-Null $AnzahlDateien = "{0,9:0,0}" -f [INT]$Matches[2] $logdatei | Where-Object {"$_" -match "(Verzeich\.|Dirs\s)\:\s+(\d+)\s"} | Out-Null $AnzahlUnterOrdner = "{0,10:0,0}" -f [INT]$Matches[2] $Groesse = "{0,12:n2}" -f [math]::Round((($logdatei | Where-Object {$_ -match "Bytes"}).trim().split(" ")[1]) / 1MB , 2) #endregion #region Erzeugen des Ausgabeobjekts [PSCustomObject]@{ "Subfolders" = $AnzahlUnterOrdner "FileCount" = $AnzahlDateien "Size (MB)" = $Groesse } Probier ob's passt ... es sollte mit deutschem und englishem robocopy log klar kommen Edit: Achso ... was ich noch vergessen habe .... wichtig!!! damit das funktioniert, musst Du robocopy mit dem SChalter /bytes aufrufen!!!! Danke für das Skript, funktioniert mit meiner Logdate auch, aber ich habe keinen Plan, wich das jetzt umgebogen bekomme auf kopierte Bytes. Dafür fehlt mir gerade ein wenig das KnowHow Zitieren Link zu diesem Kommentar
BOfH_666 577 Geschrieben 28. Juni 2018 Melden Teilen Geschrieben 28. Juni 2018 vor 1 Stunde schrieb Kuddel071089: funktioniert mit meiner Logdate auch, aber ich habe keinen Plan, wich das jetzt umgebogen bekomme auf kopierte Bytes. Dafür fehlt mir gerade ein wenig das KnowHow ??? Wenn's schon funktioniert, brauchst Du doch nix mehr umbiegen!? Falls doch nicht: Wer hat denn den robocopy-Befehl so eingerichtet, dass er Daten von einem NAS auf's nächste schiebt? Dem sagst Du, er soll als weitere Option an die Kommandozeile ein "/BYTES" anhängen - das wars. Damit würde robocopy nicht mehr "KB" oder "MB" oder "GB" angeben, sondern immer nur Bytes. Und das rechnet der Code immer in "MB" um. Zitieren Link zu diesem Kommentar
Kuddel071089 9 Geschrieben 28. Juni 2018 Autor Melden Teilen Geschrieben 28. Juni 2018 Naja dein Skirpt zeigt mir doch die gesamt Anzahl der Unterordner und die Anzahl der Datein in der Quelle an. MIch interssiert ja aber nur die Datenmenge die kopiert wurde und die wird nicht angezeigt Zitieren Link zu diesem Kommentar
BOfH_666 577 Geschrieben 28. Juni 2018 Melden Teilen Geschrieben 28. Juni 2018 Du hast das Talent, mich zu verwirren. Hattest Du nicht vorhin geschrieben, dass es auch mit Deiner "Logdate" funktioniert? Was wird denn ausgegeben? Bitte immer daran denken, dass wir (ich) Deinen Bildschirm nicht sehen können (kann). Es wäre also hilfreich, zu sehen, welchen Code genau Du benutzt hast, welche Fehlermeldungen Du evtl. bekommen hast und vielleicht welche Ausgabe Du erhalten hast und wie sich diese zur erwarteten Ausgabe unterscheidet. Zitieren Link zu diesem Kommentar
Kuddel071089 9 Geschrieben 28. Juni 2018 Autor Melden Teilen Geschrieben 28. Juni 2018 (bearbeitet) Okay dann versucheich jetzt noch einmal ausführlicher zu beschreiben ^^ Ich habe die Logdatei importiert und versucht weiter zu verarbeiten Quelldaten (klassicher Robocopy Log) Insgesamt Kopiert ÜbersprungenKeine šbereinstimmung FEHLER Extras Verzeich.: 1811 0 0 0 0 0 Dateien: 20429 0 20429 0 0 0 Bytes: 5.944 t 2.000 t 5.944 t 0 0 0 Zeiten: 0:02:22 0:00:00 0:00:00 0:02:22 Beendet: Donnerstag, 28. Juni 2018 08:16:42 Mich interessieren jetzt nur die 2.000 t in der Spalte "kopiert". Bis jetzt habe ich es geschafft den import auf die Zeile zu minimieren cls $temp = "K:\temp.txt" $logdatei = Get-content K:\backup_nas_Log.txt -Tail 7 $logdatei | Out-File -FilePath $temp $logdatei = Get-Content $temp -Tail 4 $logdatei | Out-File -FilePath $temp $logdatei = Get-Content $temp | Select-Object -first 1 $logdatei Remove-Item $temp Ergebnis: Bytes: 5.944 t 2.000 t 5.944 t 0 0 0 Jetzt muss ich die 2.000t irgendwie noch aus der Zeile ausschneiden... bearbeitet 28. Juni 2018 von Kuddel071089 Zitieren Link zu diesem Kommentar
Beste Lösung BOfH_666 577 Geschrieben 28. Juni 2018 Beste Lösung Melden Teilen Geschrieben 28. Juni 2018 OK, Du benutzt also nicht mein Codebeispiel. Na das erklärt schon ein wenig. Wenn Du meinen Code benutzen wolltest, bräuchtest Du die Logdatei nicht vorher aufwändig zerteilen, sondern könntest sie komplet verfüttern. Dafür müsstest Du allerdings VORHER bei Deinem nächsten Copyjob mit robocopy den Aufruf von robocopy so anpassen, dass robocopy entsprechend große Jobs nicht mehr in GB oder TB angibt, sondern in Bytes. Das hatte ich ja oben shcon beschrieben. .... soviel dazu. Wenn Du jetzt mit Deinem Code weitermachen möchtest, hast Du verschiedene Möglichkeiten. Eine einfachere wäre z.B., die Zeile einfach an den Leerstellen aufzusplitten und dann einfach das 5. Element auszugeben. So hier: ($logdatei -split "\s+")[4] Zitieren Link zu diesem Kommentar
Kuddel071089 9 Geschrieben 28. Juni 2018 Autor Melden Teilen Geschrieben 28. Juni 2018 Da ich dein Skript nicht so ganz verstehe ^^ habe ich es selber versucht. Mit deinem letzten Tip bekomme ich jetzt die 2000 raus. Dann werde ich das mal einbauen und morgen früh checken was in der Mail steht Zitieren Link zu diesem Kommentar
BOfH_666 577 Geschrieben 28. Juni 2018 Melden Teilen Geschrieben 28. Juni 2018 Supi. Ich drücke die Daumen. Zitieren Link zu diesem Kommentar
Kuddel071089 9 Geschrieben 29. Juni 2018 Autor Melden Teilen Geschrieben 29. Juni 2018 (bearbeitet) Startzeit: 29.06.2018 - 08.00 Uhr Ende: 29.06.2018 - 08.03 Uhr ------------------------------------------------- FREIER SPEICHER AUF E:\ 2.27 TB FREIER SPEICHER AUF F:\ 2.66 TB Kopierte Daten: 0 GB Dauer: 0h:-2m:-54s funktioniert Besten Dank bearbeitet 29. Juni 2018 von Kuddel071089 Zitieren Link zu diesem Kommentar
BOfH_666 577 Geschrieben 29. Juni 2018 Melden Teilen Geschrieben 29. Juni 2018 (bearbeitet) Hmmmm ... bist Du Dir wirklich sicher? Wenn ich Deine Beispiel-Logdaten richtig interpretiere, die Du am Anfang gepostet hattest, hast Du dort 2TB von insgesamt 5.99TB kopiert. In der Ausgabe, die Du hier oben zeigst, steht 0GB. Bist Du sicher, dass das so zusammenpasst, wie Du Dir das vorstellst? Deshalb hätte mein Code die kopierten Bytes immer als Bytes entgegengenommen und selbst in MB umgerechnet. Damit könntest Du die automatische "Zusammenfassung" größerer Dateimengen von robocopy umgehen. bearbeitet 29. Juni 2018 von BOfH_666 Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.