From ea469ba167e11e2a04912d93d123a6b482348b01 Mon Sep 17 00:00:00 2001 From: scriptos Date: Wed, 8 Nov 2023 13:35:13 +0100 Subject: [PATCH] Initial --- README.md | 12 +++++++++- WIN-CleanOldFiles.ps1 | 55 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 66 insertions(+), 1 deletion(-) create mode 100644 WIN-CleanOldFiles.ps1 diff --git a/README.md b/README.md index 10dfbe3..bf45568 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,12 @@ -# win-cleanoldfiles +# Automatisches löschen von Dateien und Ordnern +Dieses PowerShell-Skript dient dazu, Dateien und Verzeichnisse in einem angegebenen Verzeichnis zu löschen, die älter als ein bestimmter Zeitraum sind. Es ermöglicht eine effiziente Bereinigung von nicht mehr benötigten Daten. +Das Skript ist nützlich für die Wartung von Speicherplatz und die Aufrechterhaltung einer sauberen Verzeichnisstruktur. + +## Anzupassende Variablen: + +**$Verzeichnis** = "D:\Pfad\zum\Verzeichnis" + +**$ZeitrahmenInTagen** = 365 + +**$LogPfad** = "C:\logs\CleanOldFiles.log" \ No newline at end of file diff --git a/WIN-CleanOldFiles.ps1 b/WIN-CleanOldFiles.ps1 new file mode 100644 index 0000000..fe092ea --- /dev/null +++ b/WIN-CleanOldFiles.ps1 @@ -0,0 +1,55 @@ +# Script Name: WIN-CleanOldFiles.ps1 +# Beschreibung: Löscht Dateien und Verzeichnisse, die älter als ein definierter Zeitraum sind +# Aufruf: - +# Autor: Patrick Asmus +# Web: https://www.media-techport.de +# Git-Reposit.: https://git.media-techport.de/scriptos/win-cleanoldfiles.git +# Version: 1.0 +# Datum: 08.11.2023 +# Modifikation: Initial +##################################################### + +# Variablen +$Verzeichnis = "D:\temp" +$ZeitrahmenInTagen = 730 +$LogPfad = "C:\logs\CleanOldFiles.log" + +# Berechnung Startdatum des Zeitrahmens +$Startdatum = (Get-Date).AddDays(-$ZeitrahmenInTagen) +$GelöschtdurchScriptAm = Get-Date + +# Funktion zur Formatierung des Datums im deutschen Stil +function Format-DeutschesDatum ([datetime] $date) { + return $date.ToString("dd.MM.yyyy") +} + +# Lösche Dateien und Verzeichnisse, die älter als der angegebene Zeitraum sind +$GelöschteDateien = @() +$GelöschteVerzeichnisse = @() + +Get-ChildItem -Path $Verzeichnis -Recurse | ForEach-Object { + if ($_.LastWriteTime -lt $Startdatum) { + if ($_.PSIsContainer) { + $_ | Remove-Item -Force -Recurse + $GelöschteVerzeichnisse += $_.FullName + $LogMeldung = "Ordner gelöscht am: $(Format-DeutschesDatum $GelöschtdurchScriptAm) | $($_.FullName)" + Write-Output $LogMeldung + $LogMeldung | Out-File -Append -FilePath $LogPfad + } else { + $_ | Remove-Item -Force + $GelöschteDateien += $_.FullName + $LogMeldung = "Datei gelöscht am: $(Format-DeutschesDatum $GelöschtdurchScriptAm) | Letzte Änderung: $(Format-DeutschesDatum $_.LastWriteTime) | $($_.FullName)" + Write-Output $LogMeldung + $LogMeldung | Out-File -Append -FilePath $LogPfad + } + } +} + +# Überprüfe, ob das Verzeichnis leer ist, und entferne es gegebenenfalls +if ((Get-ChildItem -Path $Verzeichnis | Measure-Object).Count -eq 0) { + Remove-Item -Path $Verzeichnis -Force -Recurse + $GelöschteVerzeichnisse += $Verzeichnis + $LogMeldung = "Ordner gelöscht am: $(Format-DeutschesDatum $GelöschtdurchScriptAm) | $Verzeichnis" + Write-Output $LogMeldung + $LogMeldung | Out-File -Append -FilePath $LogPfad +}