56 lines
2.2 KiB
PowerShell
56 lines
2.2 KiB
PowerShell
|
# 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
|
|||
|
}
|