Site icon Franky's Web

Exchange: Delete old OWA/ECP data

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 Exchange server log files you can also gain some storage space here.

Frank C. also has the following sentence in his article:

You could of course also automate the deletion of old versions using PowerShell or similar.

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

I have taken the sentence and converted it into a PowerShell script. The following PowerShell script lists all old versions in the following directories:

For security reasons, the script determines the oldest Exchange Server version (in environments with multiple Exchange Servers) and lists all versions of the directories that are older than the oldest Exchange Server. This ensures that the directory versions matching the build of the oldest Exchange Server remain available and are not deleted.

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.

Here is the script, which can be copied into a .PS1 file:

<#
    .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
    }
}

If you want it a little easier, I have also published the script on GitHub:

Update 07.12.2021: The script has been updated to include more older versions, the changes can be tracked on GitHub. Thank you for the pull request.

Exit mobile version