2013-05, Löschung unnötiger Logdateien

Jeder von uns hat irgendwann mal Platzprobleme. In vielen Fällen entstehen diese Probleme durch Logdateien. Entweder durch die normalen Logdateien irgendeiner Anwendung oder eines Serverdienstes, vielleicht erzeugen wir diese Logdateien auch selbst für die Überwachung eigener Prozesse.

Hier ein kleines Beispiel zur automatisierten Löschung von Logdateien.

###########################################################################
# Autor:    Alexander Blümm
# Version:  1.0 (2011-11-16)
# Funktion: Dieses Script prüft LOG-Ordner
# Es werden Logdateien gelöscht, die älter als 2 Tage sind. (oder was festgelegt wurde)
# Dies wird verwendet, damit die HDD nicht vollläuft.
###########################################################################

# Das Alter der Dateien darf wieviele Minuten zurückliegen ?
$erlaubtesAlter = -2880

# Logdateipfade, hier werden die Basisordner der zu überwachenden Logdateiordner angegeben
# Bitte den abschließenden ‚\‘ nicht vergessen !!!
$BasePath = „e:\Pfad\zu\1\“,“e:\Pfad\zu\2\“,“e:\Pfad\zu\3\“,“e:\Pfad\zu\4\“

# Logpfade, hier wird der Unterordner angegeben
# Kein führender ‚\‘ !!!
$LogPath = „Logs\“

# Dateien zum löschen
$LogFiles = „DebugLog*.txt“

# Name der LogDatei generieren
# JA, ich protokolliere tatsächlich die Löschung der Logdateien
$Datum = get-date -uformat „%Y-%m-%d“
$LogDatei = $Datum + „_removedITEMS.txt“
$ZielFreigabeLogFile = „\\IP-des-SRV\BackupLogs$“

# Zählervariable nullen
$Zaehler0 = 0
$i = 0

# Emaileinstellungen
# Ich lass mir die Logdatei einmal am Tag per Email zuschicken.
$emailAbsender   = „“
$emailEmpfaenger = „“
$emailServer     = „“
$emailUSER       = „“
$emailPASS       = „“

# Startdatum /-Uhrzeit und Bemerkung in das Logfile eintragen
(get-date -uformat „%T“) + “ – Start der Datenlöschung “ | Out-File -Append -Encoding utf8 -FilePath $ZielFreigabeLogFile“\“$LogDatei

# Eine Leerzeile einfügen
“                                                                                 “ | Out-File -Append -Encoding utf8 -FilePath $ZielFreigabeLogFile“\“

# Information eintragen was jetzt gleich passiert
$LogDatei „Es werden Dateien gelöscht, deren Erstellungszeit weiter als “ + $erlaubtesAlter + “ Minuten zurückliegt.  “ | Out-File -Append -Encoding utf8 -FilePath $ZielFreigabeLogFile“\“$LogDatei

# Eine weitere Leerzeile einschieben
“                                                                                 “ | Out-File -Append -Encoding utf8 -FilePath $ZielFreigabeLogFile“\“$LogDatei

# Eine Trennlinie einfügen
„#################################################################################“ | Out-File -Append -Encoding utf8 -FilePath $ZielFreigabeLogFile“\“$LogDatei

# Eine weitere Leerzeile einschieben
“                                                                                 “ | Out-File -Append -Encoding utf8 -FilePath $ZielFreigabeLogFile“\“$LogDatei

# Prüfen welche Dateien älter als die definierten Minuten sind.
while ($Zaehler0 -lt $BasePath.count)
{
$PfadName = $BasePath[$Zaehler0] + $LogPath
$DateiName = $PfadName + $Logfiles
“                                                   “ | Out-File -Append -Encoding utf8 -FilePath $ZielFreigabeLogFile“\“$LogDatei
„Dateien in Ordner “ + $PfadName + “ werden gelöscht“ | Out-File -Append -Encoding utf8 -FilePath $ZielFreigabeLogFile“\“$Logdatei
„———————————————————————————————————————————“ | Out-File -Append -Encoding utf8 -FilePath $ZielFreigabeLogFile“\“$LogDatei

# Auflisten der Dateien und in das Logfile eintragen
Get-ChildItem -Path $DateiName |Where-Object -FilterScript {($_.CreationTime -lt ((Get-Date).addminutes($erlaubtesAlter)))} | Sort-Object CreationTime | format-table Length, Name, LastWriteTime, CreationTime -auto | Out-File -Append -Encoding utf8 -FilePath $ZielFreigabeLogFile“\“$LogDatei

# Löschen der Dateien
Get-ChildItem -Path $DateiName |Where-Object -FilterScript {($_.CreationTime -lt ((Get-Date).addminutes($erlaubtesAlter)))} | remove-item $Zaehler0 = $Zaehler0 + 1
}

# Emailversand vorbereiten
# Inhalt der Textdatei in Variable einlesen
$Nachricht = Get-Content $ZielFreigabeLogFile“\“$LogDatei

# Anzahl der Felder des Arrays bestimmen
$NachrichtLaenge = $Nachricht.Count

# Email generieren
$mail = New-Object System.Net.Mail.MailMessage
$mail.From = New-Object System.Net.Mail.MailAddress($emailAbsender)
$mail.To.Add($emailEmpfaenger)
$mail.Subject = „Löschung der Logfiles“
for ($i; $i -lt $NachrichtLaenge; $i++)
{
$Message = $Message += $Nachricht[$i] + „`n“
}
$mail.Body = $Message

# Verbindung zum Mailserver herstellen
$smtp = New-Object System.Net.Mail.SmtpClient($emailServer)
$smtp.Credentials = New-Object System.Net.NetworkCredential($emailUSER,$emailPASS)

# Email versenden
$smtp.Send($mail)

 

Comments are closed.