FixAlias

Mit Exchange 2007 und 2010 dürften einige Administratoren aufschrecken, wenn die Exchange Verwaltungstools (GUI oder PowerShell) über "korrupte" Elemente sprechen.

Mittlerweile hat auch das Exchange Team-Blog ein vergleichbares Skript
http://blogs.technet.com/b/exchange/archive/2007/06/15/3403186.aspx

Das sichtbare Problem

Auch in der GUI werden Sie auf diesen Fehler hingewiesen.

In vielen Fällen zeigt die MMC und die PowerShell ja an, was genau defekt ist. In vielen Fällen sind es aber genau "öffentliche Ordner", welche korrupt sind, weil es zum einen sehr viele geben kann, weil die Anwender diese selbst mit den lustigsten Namen eingeben und weil bis Exchange 5.5 alle Ordner auch automatisch "Mailenabled" wurden. So passiert es dann schon, dass sehr viele Ordner aus sicht von Exchange 2010 einen nicht mehr gültigen Alias haben.

Auf der Seite Set-MailContact http://technet.microsoft.com/de-DE/library/aa995950 werden auch noch mal die erlaubten Zeichen angezeigt.

Die Ursache und Auswirkungen

Die Ursache ist nun nicht, dass Siefrüher geschludert haben, sondern das Exchange 2007 sehr viel strenger mit der Überprüfung von Feldinhalten ist. Gerade beim Alias war unter Exchange 4.0 bis 2003 noch ziemlich viel möglich, z.B. auch Leerzeichen und andere Sonderzeichen. Der Exchange RUS hat sich schon darum gekümmert, bei der Generierung von Mailadressen nur gültige Zeichen zuzulassen. Dabei hat er natürlich dann die ungültigen Sonderzeichen entweder wegrationalisiert oder versucht umzusetzen. "Vorhersehbar" war die Reaktion natürlich nur für den, der schon nahe am Code war und wusste, was passiert.

Da ist mir der Ansatz von Exchange 2007/2010 schon lieber, solche Sonderzeichen gar nicht mehr zuzulassen und den Administrator dazu zu zwingen, korrekte Werte einzugeben.

Korrektur und Empfängerrichtlinien

Es bietet sich also an, diese Einträge zu "Fixen" und wenn Sie gleiche eine Menge davon haben, dann macht man sich das natürlich mit einemPowerShell Skript. Andererseits sollten Sie aber wissen, dass auch Empfängerrichtlinien durchaus den Alias mit in die Mailadresse einbeziehen können und eine Änderung des Alias also auch dazu führt, dass bei den betroffenen Objekten eventuell die Mailadresse neu generiert wird oder zumindest als sekundäre Adresse addiert wird. Durch viele Änderungen (mehr als 10%) kann es auch dazu kommen, dass das Offline Adressbuch komplett neu generiert wird. Bedenken Sie dies bei größeren Installationen mit vielen "defekten" Elementen.

Lets fix it !

Mein erstes Skript habe ich für öffentliche Ordner geschrieben, um hier den Alias zu korrigieren. Es hat aber nur Buchstaben zugelassen und daher erspare ich ihnen diese erste Version. Die PowerShell Fehlermeldung zweigt noch besser aus, welche Zeichen eigentlich erlaubt sind.

WARNING: Property expression "bad User" isn't valid. Valid values are: Strings formed with characters from A to Z (uppercase or lowercase), digits from 0 to 9, !, #, $, %, &, ', *, +, -, /, =, ?, ^, _, `, {, |, } or ~. One or more periods may be embedded in an alias, but each period should be preceded and followed by at least one of the other characters.

Also kann man damit ja einen "bessere" RegEx Ausdruck erstellen.

'[^a-zA-Z\+\!\$%&\#\*\+\-/=\?\^_\`\{\|\}\~\.]'

Dieser RegEx-Audruck hat nur noch die Einschränkung, dass er führende oder am Ende stehende "Punkte" nicht abfängt.

Leider gibt es nun zwar das Commandlet "Get-Recipient" aber nicht das Gegenstück in Form von "Set-Recipient". Man muss das Ganze also pro Empfängertyp individuell machen. Also wieder ein kleinen PowerShell-Skript, was die Daten normiert.

function Fix-Alias {  param ($oldalias)
	$oldalias -replace '[^a-zA-Z\+\!\$%&\#\*\+\-/=\?\^_\`\{\|\}\~\.]',"?"
}

Get-MailPublicFolder  | % {Set-Mailpublicfolder -identity $_.identity -alias (fix-Alias($_.alias))}
Get-Mailbox | % { Set-Mailbox -identity $_.identity -alias (fix-Alias($_.alias))}
Get-MailContact | % { Set-MailContact -identity $_.identity -alias (fix-Alias($_.alias))}
Get-MailUser | % { Set-MailUser -identity $_.identity -alias (fix-Alias($_.alias))}
Get-DistributionGroup | % { Set-DistributionGroup -identity $_.identity -alias (fix-Alias($_.alias))}
Get-DynamicDistributionGroup | % { Set-DynamicDistributionGroup -identity $_.identity -alias (fix-Alias($_.alias))}

Denken Sie an "-Resultsize unlimited" beim Get-*, wenn Sie mehr als 1000 Elemente zu verarbeiten haben

Achtung mit Empfängerrichtlinien %m
Wenn Sie in Empfängerrichtlinien die Variable "%m" verwenden, dann kann die Änderung des Alias auch die Mailadresse ändern bzw. erweitern.

Speichern Sie die Zeilen einfach als PS1-Datei ab und führen Sie diese in einer Exchange PowerShell Box aus.

Weitere Links