Löschscript mit Datum anpassen
Hallo zusammen,
ich möchte gerne dieses Lösch Script anpassen
https://www.tech-faq.net/dateien-loeschen-die-aelter-sind-als-x-tage/#go ...
Nun haben wir diese Anforderung:
- Daten der letzen Periode müssen immer vorhanden sein.
- Daten bleiben bis zum 31 März im Folgejahr gespeichtet
- Danach werden diese unwiederruflich gelöscht.
Wie kann ich dieses Datum in das Löschscript einbauen ?
Gruss
Paul
ich möchte gerne dieses Lösch Script anpassen
https://www.tech-faq.net/dateien-loeschen-die-aelter-sind-als-x-tage/#go ...
Nun haben wir diese Anforderung:
- Daten der letzen Periode müssen immer vorhanden sein.
- Daten bleiben bis zum 31 März im Folgejahr gespeichtet
- Danach werden diese unwiederruflich gelöscht.
Wie kann ich dieses Datum in das Löschscript einbauen ?
Gruss
Paul
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 6805629755
Url: https://administrator.de/forum/loeschscript-mit-datum-anpassen-6805629755.html
Ausgedruckt am: 19.04.2025 um 08:04 Uhr
21 Kommentare
Neuester Kommentar

Hi,
beschreibe bitte genau, was du brauchst, so kann dir keiner helfen.
-Thomas
beschreibe bitte genau, was du brauchst, so kann dir keiner helfen.
- Daten der letzen Periode müssen immer vorhanden sein.
Welche Periode? Wahlperiode der Bundestagswahl? 01.01. bis 31.12.?- Daten bleiben bis zum 31 März im Folgejahr gespeichtet
Am 31. März sollen welche Daten genau gelöscht werden?- Danach werden diese unwiederruflich gelöscht.
Was heißt für dich unwiderruflich gelöscht? So dass ein Datenrettungssprofi sie nicht wiederherstellen kann? Oder so, dass sie nicht im Papierkorb liegen?-Thomas

- Periode ist hier 1 Monat
Also du willst alle Dateien löschen, die von vor letztem Monat stammen?- Am 31. März dann alles vom Vorjahr
Aber die Daten sind dann doch schon gelöscht?- Diese sind dann Filemässig nicht mehr vorhanden.
okaySorry, kann auch sein dass ich gerade auf der Leitung stehe.
So löscht das Skript alle Dateien, die älter als der 1. des letzten Monats sind:
$Source = "C:\Temp"
$ext = "*.bat","*.cat"
$log = Join-Path -Path $Source -ChildPath "$(get-date -format yymmddHHmmss).txt"
$startDate = (Get-Date).AddMonths(-1)
$1stoflastmonth = [DateTime]::new( $startDate.Year, $startDate.Month, 1, 0, 0, 0)
Start-Transcript $log
Get-ChildItem $Source -Include $ext -Recurse -File | Where-Object LastWriteTime -lt $1stoflastmonth | Remove-Item -Force -Verbose
Stop-Transcript
Moin,
@itnirvana: wie du merkst, aus deiner Angabe der Zeiträume wird keiner schlau.
Mein Versuch - um erstmal das Datum abzufangen:
Heute ist der 17.04.2023. Du willst demnach alles löschen, was ÄLTER als der 31.03.2022 ist
Wenn heute der 18.05.2023 wäre, müsste alles gelöscht werden, was älter denn 30.04.2022 ist
Falls das nicht korrekt ist, gibt bitte mal zwei... drei Beispiele an, was die Basis ist und welches Datum dann für den Löschprozess herangezogen werden muss...
Gruß
em-pie
@itnirvana: wie du merkst, aus deiner Angabe der Zeiträume wird keiner schlau.
Mein Versuch - um erstmal das Datum abzufangen:
Heute ist der 17.04.2023. Du willst demnach alles löschen, was ÄLTER als der 31.03.2022 ist
Wenn heute der 18.05.2023 wäre, müsste alles gelöscht werden, was älter denn 30.04.2022 ist
Falls das nicht korrekt ist, gibt bitte mal zwei... drei Beispiele an, was die Basis ist und welches Datum dann für den Löschprozess herangezogen werden muss...
Gruß
em-pie

Zitat von @em-pie:
Mein Versuch - um erstmal das Datum abzufangen:
Heute ist der 17.04.2023. Du willst demnach alles löschen, was ÄLTER als der 31.03.2022 ist
Wenn heute der 18.05.2023 wäre, müsste alles gelöscht werden, was älter denn 30.04.2022 ist
Falls das nicht korrekt ist, gibt bitte mal zwei... drei Beispiele an, was die Basis ist und welches Datum dann für den Löschprozess herangezogen werden muss...
Mein Versuch - um erstmal das Datum abzufangen:
Heute ist der 17.04.2023. Du willst demnach alles löschen, was ÄLTER als der 31.03.2022 ist
Wenn heute der 18.05.2023 wäre, müsste alles gelöscht werden, was älter denn 30.04.2022 ist
Falls das nicht korrekt ist, gibt bitte mal zwei... drei Beispiele an, was die Basis ist und welches Datum dann für den Löschprozess herangezogen werden muss...
Falls das korrekt ist, passt mein Skript oben
Löschscript mit Datum anpassen

Zitat von @itnirvana:
Hallo,
im Endeffect muss das Script nur prüfen. ist heute später als der 31.3 , dann lösche das Vorjahr..
Gruss
Paul
Hallo,
im Endeffect muss das Script nur prüfen. ist heute später als der 31.3 , dann lösche das Vorjahr..
Gruss
Paul
Jetzt wird ein Schuh draus.
Mach einen Scheduled Task für jeden 01.04. der folgendes ausführt:
$folder = "C:\tmp"
$firstDayofYear = [datetime]::new((Get-Date).Year,1,1,0,0,0)
Get-ChildItem -File -Path $folder -Recurse | Where-Object LastWriteTime -lt $firstDayofYear | Remove-Item -Force
Bitte vorher mit Testdaten ausprobieren.

Zitat von @Kraemer:
?
Zitat von @3063370895:
$folder = "C:\tmp"
$firstDayofYear = [datetime]::new((Get-Date).Year,1,1,0,0,0)
Get-ChildItem -File -Path $folder -Recurse | Where-Object LastWriteTime -lt $firstDayofYear | Remove-Item -Force
[datetime]::new((Get-Date).Year,4,1,0,0,0)
Nein, ich brauche das Datum um Daten zu löschen die älter sind als das angegeben. deswegen der 01.01.
im Endeffect muss das Script nur prüfen. ist heute später als der 31.3 , dann lösche das Vorjahr..
Mein script sollte als Scheduled Task am 01.04. jedes Jahres ausgeführt werden.

Sorry, aber es ist echt schwierig, dir zu helfen.
Wenn du das willst:
brauchst du nur dieses Skript als scheduled task 1x im Jahr am 01.04. ausführen:
Wenn du das willst:
im Endeffect muss das Script nur prüfen. ist heute später als der 31.3 , dann lösche das Vorjahr..
brauchst du nur dieses Skript als scheduled task 1x im Jahr am 01.04. ausführen:
$folder = "C:\tmp"
$firstDayofYear = [datetime]::new((Get-Date).Year,1,1,0,0,0)
Get-ChildItem -File -Path $folder -Recurse | Where-Object LastWriteTime -lt $firstDayofYear | Remove-Item -Force

Das ist mein letzter Versuch, dir zu helfen
btw.. wtf?
Die Logik erschließt sich mir jedoch nicht. Warum willst du ein Skript jeden Tag ausführen, welches nur an einem Tag laufen soll?
Warum nicht direkt nur an dem Tag ausführen?
# Beschreibung:
# Dieses Skript zeigt Dateien, die eine bestimmte Anzahl von Tagen alt sind. Die Dateierweiterungen, das Alter sowie der Ablageort sind definierbar.
# Der Anzeigevorg erstreckt sich auf alle Unterordner. Alle Operationen werden in einem Logfile im Quellordner gespeichert
# !!! Benutzung auf eigene Gefahr !!!
#
# Hier können Sie den Quellordner, das Alter der Dateien (in Tagen) und die Dateierweiterungen festlegen
$Source = "D:\DSigArchive\" # Wichtig: muss mit "\" enden
$Days = 485 # Anzahl der Tage, nach denen die Dateien angezeigt werden
$ext = "*.zip"
$log = "$Source$(get-date -format yymmddHHmmss).txt"
$DateBeforeXDays = (Get-Date).AddDays(-$Days)
$mar31 = Get-Date -Month 3 -Day 31 -Year (Get-Date).Year
if ((Get-Date) -lt $mar31) {
Write-Host "Das Datum ist vor dem 31. März des aktuellen Jahres. Das Skript wird beendet."
Exit
}
# Start Script
start-transcript $log
write-host "--------------------------------------------------------------------------------------"
write-host "Anzeigen aller Dateien ($ext) im Ordner $Source die aelter sind als $Days Tage."
write-host "--------------------------------------------------------------------------------------"
$files = get-childitem $Source\* -include $ext -recurse | where {$_.lastwritetime -lt $DateBeforeXDays -and -not $_.psiscontainer}
$totallength = ($files | Measure-Object -Sum Length).Sum / 1GB
$totalfilescount = ($files | Measure-Object).count
$files
$files | Remove-Item -Force
Write-Host "Gesamtgröße (GB) $totallength ($totalfilescount Files)" -ForegroundColor Green
stop-transcript
btw.. wtf?
$currYear = Get-Date -Year (Get-Date).Year
Die Logik erschließt sich mir jedoch nicht. Warum willst du ein Skript jeden Tag ausführen, welches nur an einem Tag laufen soll?
Warum nicht direkt nur an dem Tag ausführen?