PowerShell: Logfiles nach der 7ten Version verschieben
Hallo zusammen
Ich stehe an einem kleinen Problem. Ich will meine Logfiles nach der 7ten Version auf meine Festplatte speichern. Ich habe 14 Ordner mit verschiedenen Logfiles und ich will nicht jeden Ordner angeben.
Mit Get-ChildItem habe ich alle Logfiles anzeigen können und jetzt würde ich gerne nur die älteren sehen. Somit sollte es in den 14 verschiedenen Ordner nur max. 7 Logfiles haben.
Get-ChildItem Befehl:
Ich habe mir überlegt das die Variabel $scanfolder evtl. änder und von Ordner zu Ordner springt und die Dateien dann so verschiebt. Jedoch komme ich nicht weiter.
Ich hoffe jemand versteht wo ich stecken bleibe und kann mir evtl. einen kleinen Tipp geben. Ich brauche keine ganze Lösung, einen Tipp währe schon sehr hilfreich.
Gruss
ImmerKind
Ich stehe an einem kleinen Problem. Ich will meine Logfiles nach der 7ten Version auf meine Festplatte speichern. Ich habe 14 Ordner mit verschiedenen Logfiles und ich will nicht jeden Ordner angeben.
Mit Get-ChildItem habe ich alle Logfiles anzeigen können und jetzt würde ich gerne nur die älteren sehen. Somit sollte es in den 14 verschiedenen Ordner nur max. 7 Logfiles haben.
Get-ChildItem Befehl:
Get-ChildItem -Path $scanlogfolder -Include *.log -Recurse
Ich habe mir überlegt das die Variabel $scanfolder evtl. änder und von Ordner zu Ordner springt und die Dateien dann so verschiebt. Jedoch komme ich nicht weiter.
Ich hoffe jemand versteht wo ich stecken bleibe und kann mir evtl. einen kleinen Tipp geben. Ich brauche keine ganze Lösung, einen Tipp währe schon sehr hilfreich.
Gruss
ImmerKind
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 308004
Url: https://administrator.de/forum/powershell-logfiles-nach-der-7ten-version-verschieben-308004.html
Ausgedruckt am: 27.04.2025 um 06:04 Uhr
3 Kommentare
Neuester Kommentar
Hallo Immerkind,
für solche Fälle eignet sich das CMDLet group-object hervorragend.
(p.s. Damit lassen sich ziemlich verrückte Dinge anstellen und Gruppierungen auch anhand von Teilen von Dateieigenschaften durchführen, musst du dir unbedingt mal ansehen was damit alles möglich ist. Ich zumindest nutze es sehr häufig.)
Erläuterung:
Zuerst holst du dir eine Liste aller Logfiles welche du dann per group-object anhand der Eigenschaft DirectoryName der Dateien gruppierst.
Daraus ergibt sich dann ein Objekt das alle Ordner und deren beinhalteten Log-Dateien in der Eigenschaft Group als Array enthält. Für jedes Gruppenobjekt (Ordner) sortierst du nun das Array $_.Group absteigend nach LastWriteTime und überspringst 7 Versionen die ja beibehalten werden sollen. Die dann noch eventuell verbleibenden Logs werden dann per move-item in einen Zielordner verschoben.
Hoffe ich habe das so richtig interpretiert.
Grüße Uwe
für solche Fälle eignet sich das CMDLet group-object hervorragend.
(p.s. Damit lassen sich ziemlich verrückte Dinge anstellen und Gruppierungen auch anhand von Teilen von Dateieigenschaften durchführen, musst du dir unbedingt mal ansehen was damit alles möglich ist. Ich zumindest nutze es sehr häufig.)
gci 'C:\Ordner\*.log' -recurse -file | group DirectoryName | %{$_.Group | sort LastWriteTime -Descending | select -Skip 7 | move-item -Destination 'C:\Backup\Ablage'}
Zuerst holst du dir eine Liste aller Logfiles welche du dann per group-object anhand der Eigenschaft DirectoryName der Dateien gruppierst.
Daraus ergibt sich dann ein Objekt das alle Ordner und deren beinhalteten Log-Dateien in der Eigenschaft Group als Array enthält. Für jedes Gruppenobjekt (Ordner) sortierst du nun das Array $_.Group absteigend nach LastWriteTime und überspringst 7 Versionen die ja beibehalten werden sollen. Die dann noch eventuell verbleibenden Logs werden dann per move-item in einen Zielordner verschoben.
Hoffe ich habe das so richtig interpretiert.
Grüße Uwe
Zitat von @ImmerKind:
Ist es möglich, dass er die Ordnerstruktur mitkopiert und diese im Zielordner platziert. Somit könnte ich später unterschieden welche Logs von wessen Ordner sind?
Ja das kannst du ganz einfach machen, Du nimmst dir in der Schleife den Pfad des Ordners und ersetzt darin den Teil des Quellordners mit dem Pfad des Zielordners. Diesen neu zusammengesetzten Pfad prüfst du mit Test-Path ob er schon existiert und wenn nicht, erstellst du den Ordner vor dem Verschiebevorgang.Ist es möglich, dass er die Ordnerstruktur mitkopiert und diese im Zielordner platziert. Somit könnte ich später unterschieden welche Logs von wessen Ordner sind?
$quelle = 'C:\Ordner'
$ziel = 'C:\Backup'
gci $quelle -Filter *.log -recurse -file | group DirectoryName | %{
$dest = $_.Name.replace($quelle,$ziel)
if (!(Test-Path $dest)){md $dest -Force}
$_.Group | sort LastWriteTime -Descending | select -Skip 7 | move-item -Destination $dest
}