Site icon Frankys Web

Exchange: Alte OWA/ECP Daten löschen

Exchange Server lassen nach nahezu jedem Update alte Daten bzw. Versionen der OWA und ECP Verzeichnisse auf dem Dateisystem liegen. Insbesondere das Verzeichnis „C:\Program Files\Microsoft\Exchange Server\V15\ClientAccess\Owa\prem“ belegt nach längerer Laufzeit und entsprechend vielen Updates doch einigen Platz auf dem Dateisystem. Hier mal ein Beispiel von einem Exchange Server der schon etwas länger läuft:

Alte Dateiversionen / Daten im Verzeichnis „prem“ belegen hier immerhin 16 GB auf dem Dateisystem. Genutzt werden diese Daten nicht mehr. Frank C. (msXfaq) hat zu diesem Thema einen lesenswerten Artikel erstellt:

https://www.msxfaq.de/exchange/update/alte_owa_dateien_loeschen.htm

Zwar dürften die „paar“ GB die wenigstens Leute aus der Ruhe bringen, aber es könnte ja mal knapp werden mit dem Speicherplatz. Wenn ein Laufwerk droht vollzulaufen, macht es also Sinn, wenn man weiß wo man sich etwas Luft zum Atmen verschaffen kann. Neben den Logfiles der Exchange Server lässt sich also auch hier etwas Speicherplatz gewinnen.

Frank C. hat in seinem Artikel auch den folgenden Satz stehen:

Das Löschen alter Versionen könnten Sie natürlich auch per PowerShell o.ä. automatisieren.

Quelle: https://www.msxfaq.de/exchange/update/alte_owa_dateien_loeschen.htm

Den Satz habe ich mal aufgenommen und in ein PowerShell Script umgewandelt. Das nachstehende PowerShell Script listet alle alten Versionsstände in den folgenden Verzeichnissen auf:

Zur Sicherheit ermittelt das Script die älteste Exchange Server Version (in Umgebungen mit mehreren Exchange Servern) und listet alle Versionen der Verzeichnisse auf, die älter als der älteste Exchange Server sind. Somit bleibt gewährleistet, dass die Verzeichnisversionen passend zum Build des ältesten Exchange Servers vorhanden bleiben und nicht gelöscht werden.

Das Script listet beim Ausführen nur die alten Verzeichnisversionen auf, löscht diese aber nicht. Erst wenn der Parameter „-$DeleteOldVersions:$true“ angegeben wird, werden die Daten auch gelöscht.

Hier nun das Script, welches in eine .PS1 Datei kopiert werden kann:

<#
    .SYNOPSIS
     Identifies, reports and deletes old OWA / ECP folders
    .DESCRIPTION
     Run this Script to list old and unused OWA / ECP folder. Set Parameter -DeleteOldVersions to $true if you
     want to delete old folders to free up disk space.
    .PARAMETER DeleteOldVersions
     Set DeleteOldVersions to $True to delete old OWA / ECP folder versions.
    .EXAMPLE
     .\Delete-OldFolderVersions.ps1
     List old OWA / ECP folderversions:
    .EXAMPLE
     .\Delete-OldFolderVersions.ps1 -DeleteOldVersions $true
     List and delete old OWA / ECP Directory versions:
    .NOTES
     Author:  Frank Zoechling
     Website: https://www.frankysweb.de
     Twitter: @FrankysWeb
#>
 
Param(
    [Parameter(Mandatory=$False)]
    [bool]$DeleteOldVersions
)
 
# Test if evelated Shell
Function Confirm-Administrator {
    $currentPrincipal = New-Object Security.Principal.WindowsPrincipal( [Security.Principal.WindowsIdentity]::GetCurrent() )
    if ($currentPrincipal.IsInRole( [Security.Principal.WindowsBuiltInRole]::Administrator )) {
        return $true
    } else {
        return $false
    }
}
 
if (-not (Confirm-Administrator)) {
    Write-Output $msgNewLine
    Write-Warning "This script needs to be executed in elevated mode. Start the Exchange Management Shell as an Administrator and try again."
    $Error.Clear()
    Start-Sleep -Seconds 2
    exit
}
 
#Foldernames to search for old ECP / OWA folders
$ECPFolderPath = $exinstall + "ClientAccess\ecp"
$OWAFolderPath = $exinstall + "ClientAccess\Owa"
$OWAPremFolderPath = $exinstall + "ClientAccess\Owa\prem"
 
#Get Exchange Server Versions
try {
    $ExchangeServerVersions = @()
    $ExchangeServerDisplayVersions = (Get-ExchangeServer | Where-Object { $_.AdminDisplayVersion.Major -eq 15 }).AdminDisplayVersion
    foreach ($ExchangeServerDisplayVersion in $ExchangeServerDisplayVersions) {
        $ExchangeServerVersions += $ExchangeServerDisplayVersion.Major,$ExchangeServerDisplayVersion.Minor,$ExchangeServerDisplayVersion.Build,$ExchangeServerDisplayVersion.Revision -join "."
    }
    $ExchangeServerVersion = $ExchangeServerVersions | Sort-Object | Select-Object -first 1
    write-host ""
    write-host "Oldest installed Exchange Build is: $ExchangeServerVersion"
    write-host ""
} catch {}
 
 
#Search all OWA / ECP folder versions
try {
    $AllVersions = @()
    $AllVersions += Get-ChildItem $ECPFolderPath -Directory | Where-Object { $_.Name.StartsWith("15.") } | Select-Object FullName,Name
    $AllVersions += Get-ChildItem $OWAFolderPath -Directory | Where-Object { $_.Name.StartsWith("15.") } | Select-Object FullName,Name
    $AllVersions += Get-ChildItem $OWAPremFolderPath -Directory | Where-Object { $_.Name.StartsWith("15.") } | Select-Object FullName,Name
} catch {}
 
#Search for old versions
write-host "Old OWA / ECP folders:"
write-host ""
$ExchangeBuild = [System.Version]::Parse($exchangeserverversion)
$OldVersions = @()
foreach ($Version in $AllVersions)  {
    $Folderversion = [System.Version]::Parse($Version.Name)
    if ( $Folderversion -lt $ExchangeBuild ) {
        write-host $Version.Fullname
        $OldVersions += $Version.Fullname
    }
}
write-host ""
 
#Delete old OWA / ECP folder versions
if ($DeleteOldVersions -eq $true) {
    write-host "Deleting old OWA / ECP versions:"
    write-host ""
    foreach ($Oldversion in $OldVersions) {
        write-host $Oldversion
        Remove-Item $Oldversion -Recurse -Confirm:$true
    }
}

Wer es etwas einfacher haben möchte, das Script habe ich auch auf GitHub veröffentlicht:

Update 07.12.2021: Das Script wurde aktualisiert damit mehr ältere Versionen erfasst werden, die Änderungen lassen sich auf GitHub nachvollziehen. Vielen Dank für den Pull Request.

Exit mobile version