Powershell Löschen Sie Dateien, die älter als X Tage sind, aber behalten Sie mindestens 1

Powershell Löschen Sie Dateien, die älter als X Tage sind, aber behalten Sie mindestens 1

Ich sichere derzeit meine Switch-/Router-Konfigurationen automatisch jedes Mal, wenn wir Änderungen vornehmen. Dies erfolgt durch Senden einer Textdatei per FTP an einen Ordner.

Ich versuche, ein Skript zu schreiben, das alle Dateien in einem Verzeichnis löscht, die älter als 15 Tage sind. Ich möchte jedoch die neueste Datei für jedes Gerät behalten, auch wenn sie älter als 15 Tage ist.

Das Format der Dateibenennung ist wie folgt: Der neueste Dateiname ist Hostname-Config-Change.txt. Wenn er durch eine neuere Änderung überschrieben wird, wird er umbenannt in: Hostname-Config-Change_MM-DD-YY_HH-MM-SS_Time.txt

Ich denke, der einfachste Weg, dies zu erreichen, besteht darin, alle Dateien zu löschen, die älter als 15 Tage sind und Datum und Uhrzeit im Namen haben. Ich habe keine Ahnung, wie ich das angehen soll, und obwohl ich Möglichkeiten gefunden habe, eines davon zu tun, habe ich keine Möglichkeit gefunden, beides zu tun.

Vielen Dank im Voraus für Ihre Hilfe.

Das ist mein Code bisher. Ich bin jetzt bei Powershell, daher wäre ich für jeden Rat dankbar.

#Set Variables

# Get current date/time then subtract days to keep files.
$limit = (Get-Date).AddDays(-15)

#Set path of Files to be scanned & deleted
$path = "Directory to Files"

# Delete files older than the $limit.
Get-ChildItem -Path $path -Recurse -Force | Where-Object { !$_.PSIsContainer -and $_.CreationTime -lt $limit } | Remove-Item -Force

#End of Script

Antwort1

Nur zur Vereinfachung für alle, die folgen könnten. Mithilfe der obigen Antworten konnte ich herausfinden, wie ich mithilfe von Regex nur alle Dateien mit einem Datum im Dateinamen anzeigen kann, das älter als X Tage ist. Die neueste Datei enthält kein Datum im Dateinamen, also hat es bei mir funktioniert. Seien Sie gewarnt, Sie müssen den Regex je nach Syntax des Datums anpassen.

#Set Variables

# Get current date/time then subtract days to keep files.
$limit = (Get-Date).AddDays(-15)

#Set path of Files to be scanned & deleted
$path = "D:\BACKUPS\ConfigChange"

# Delete files older than the $limit and matching the dates in the file name.
Get-ChildItem -Path $path -Recurse -Force | Where-Object { !$_.PSIsContainer -and $_.BaseName -match '(\d{2})-(\d{2})-(\d{2})_(\d{2})-(\d{2})-(\d{2})' -and $_.CreationTime -lt $limit } | Remove-Item -Force

#End of Script

verwandte Informationen