ITnotez

Leidvolles, Tipps und Know-How aus eigener Erfahrung

Exchange-Server: Logs löschen

Falls man die Logs eines Exchange (2016/2019/SE) auf die C:-Partition gelegt hat und diese vollzulaufen droht, kann das Verschieben und/oder Löschen (bzw. Reduzieren) der Logdateien helfen. Zum Verschieben siehe einen anderen Beitrag, hier kurz, wie wir die Logs bis auf die letzten fünf (5) Tage löschen.

Dazu die PowerShell mit erhöhten Rechten öffnen und folgendes darin ausführen:

Set-ExecutionPolicy RemoteSigned -Force

= es dürfen also Scripte ausgeführt werden

Get-ExecutionPolicy

= überprüfen, ob das akzeptiert wurde („RemoteSigned“ sollte angezeigt werden)

New-Item -Path „C:\Scripts“ -ItemType Directory -Force

= einen Ordner für die Scripte anlegen

Set-Location „C:\Scripts“

= diesen Ordner auswählen

Test-Path „C:\Scripts“

= überpüfen, ob der Ordnerpfad gültig ist (es sollte „True“ ausgegeben werden). Jetzt das Script herunterladen:

Invoke-WebRequest -Uri „https://raw.githubusercontent.com/SammyKrosoft/Clean-Exchange-Log-Files/master/CleanExchangeLogFiles.ps1“ -OutFile „C:\Scripts\CleanExchangeLogFiles.ps1“

= der Pfad lautet also https://raw.githubusercontent.com/SammyKrosoft/Clean-Exchange-Log-Files/master/CleanExchangeLogFiles.ps1

Liegen sollte das Script dann hier:

Get-ChildItem „C:\Scripts*.ps1“

Nun führen wir einen Testlauf durch („DoNotDelete“):

C:\Scripts\CleanupExchangeLogs.ps1 -Days 7 -DoNotDelete

Es sollte noch einmal eine Sicherheitsabfrage aufploppen:

Und so in etwa sollte das Ergebnis aussehen:

Wenn alles OK ist, kann das Script ohne den Parameter „-DoNotDelete“ ausgrführt werden. Ausserdem kann natürlich Tageszahl variiert werden.

Das gesamte Script noch einmal hier:

Exchange Log Cleanup Script

param(
[int]$Days = 7,
[switch]$DoNotDelete
)
$LogPaths = @(
„$env:SystemDrive\inetpub\logs\LogFiles“,
„$env:ExchangeInstallPath\Logging“,
„$env:ExchangeInstallPath\Bin\Search\Ceres\Diagnostics\Logs“
)
$CutoffDate = (Get-Date).AddDays(-$Days)
$TotalSize = 0
foreach ($Path in $LogPaths) {
if (Test-Path $Path) {
$Files = Get-ChildItem -Path $Path -Recurse -File | Where-Object {$_.LastWriteTime -lt $CutoffDate}
$PathSize = ($Files | Measure-Object -Property Length -Sum).Sum
$TotalSize += $PathSize
Write-Host „Found $($Files.Count) files in $Path ($(‚{0:N2}‘ -f ($PathSize/1MB)) MB)“
if (-not $DoNotDelete) {
$Files | Remove-Item -Force -ErrorAction SilentlyContinue
Write-Host „Deleted files older than $Days days from $Path“
}
}
}
Write-Host „Total space that would be freed: $(‚{0:N2}‘ -f ($TotalSize/1MB)) MB“