Exchange 2007 RUS - English
Diese Information ist auch auf Deutsch verfügbar. Siehe E2K7:RUS
Hello, the most pages of these web are german and many administrators are using google translation to get a machine translated version of the content. But a few pages are important and interesting. So i take some minutes to translate them manually. If you are native english speaking and want to correct it, your feedback is welcome.
Wie sie auf Exchange RUS und E2K7 Empfängermanagement sicher schon gelesen haben, gibt es seit Exchange 2007 keinen RUS mehr. Während Sie also früher einfach per LDAP ein paar Felder gefüllt haben (z.B. Mailnickname, HomeMDB und Mail) und der RUS auf dem Server dann die restlichen Felder nach einiger Zeit ergänzt hat, so müssen Sie bei Exchange 2007 nu komplett selbst dafür sorgen, die Felder alle richtig zu setzen. Natürlich helfen ihnen dabei die Powershell Commandlets zu Exchange und auch die Exchange 2007 Management Shell macht alles richtig, aber was ist mit all den anderen Tools ?
Achtung:
Beim ersten Durchlauf verarbeitet alle Benutzer auf Exchange 2007. Das ist
eigentlich kein Problem., da die Durchsetzung der Richtlinien schon erfolgt
ist. Es kann aber trotzdem sein, dass die Proxy-Adressen der Personen wieder
"korrigiert" werden.
Lösung: Entweder die Adressen sichern oder E2K7RUS im "Single Step"-Mode
laufen lassen. Hierbei stoppt das Skript, wenn es eine Änderung der Proxy-Addressen
erkannt hat. Sie können dann Abbrechen, die Konfiguration anpassen und die
Einstellung wieder zurück setzen. Oder die Adressen vorher exportieren (153028 XADM: How to Export Multiple (Secondary) E-mail Addresses
und 922258 How to use a VBScript to write proxy addresses to an
Ldifde.exe-compatible import file in Exchange Server 2003)
Das Problem
Wenn Sie heute z.B. eine Provisioning Anwendung haben, die ohne Rücksicht auf Exchange 2007 einfach per LDAP die Felder beschreibt, dann kann das zu ernsthaften Problemen führen. Auch die Konfiguration von Empfängern über die Exchange 2003 Snapins der MMC hinterlassen manchmal unvollständige Objekte. Nutzen sie doch einfach mal CheckExObjects um "defekte" oder unvollständige Objekte zu finden. Sie werden erstaunt sein.
Bislang war die Antwort von Microsoft hier recht einfach: Der Administrator sollte einfach folgendes Befehle immer mal wieder ausführen:
Get-EmailAddressPolicy | Update-EmailAddressPolicy
Get-AddressList | Update-AddressList
Get-GlobalAddressList | Update-GlobalAddressList
Diese Commandlets holen sich nacheinander alle Adresslisten, Empfängerrichtlinien und globale Adresslisten und starten einen vollständigen Durchlauf der Empfängerprüfung und Korrektur. Diese Verfahren mag funktionieren, aber hat doch einige Einschränkungen. die drei größten Probleme sind:
- Performance
Je größer die Organisation wird, desto mehr Empfänger sind zu verarbeiten. Dieser Prozess entspricht einem "Full Rebuild" unter Exchange 2003 und davor hat Microsoft bislang immer gewarnt. Der entsprechende DC hat ganzschön was zu tun. schlimmer wird dies noch, wenn mehrere Domains an unterschiedlichen Standorten dazu kommen. - Zeitverzug
Das Skript kann zwar jede Minute laufen, aber das wird kein Administrator wollen. Er muss also abwägen zwischen Belastung und Aktualität - Nachvollziehbarkeit
Leider schreiben all diese Programme kein Log, was Sie nun wirklich an den Empfängern verändert haben. nachvollziehbar ist dieser Prozess daher genauso wenig, wie das beim Exchange 2000/2003 RUS der Fall war, wenn man nicht mit Tools wie RUSMon nachgeholfen hat. Das ist bezüglich der ProxyAddresses wichtig, da Exchange 2007 hier die primäre Adresse immer anhand der Richtlinien setzt. (Anders als Exchange 200072003)
Mit Exchange 2007 SP1 hat Microsoft aber das "SET-MAILBOX"- Commandlet erweitert. Darauf setzt das folgende Skript auf.
Allerdings werden somit nur die Konten bearbeitet, die wirklich auch auf Exchange 2007 sind. In einer gemischten Umgebung muss der Exchange 2000/2003 RUS also weiter aktiv bleiben. E2K/RUS kann also den Exchange 2000/2003 RUS nicht komplett ersetzen.
Eine weitere Fragestellung kann mit E2K7RUS gleich mit erschlagen werden. Viele Firmen hätten gerne nach dem Anlegen eines Benutzers gleich einige weitere Parameter gesetzt. Über einen einfachen SET-MAILBOX können diese Änderungen ebenfalls anwenden z.B.
- Benutzersprache
Über den Parameter "- languages de-DE" kann man mit SET-Mailbox auch gleich die Sprache des Benutzers vorgeben. Intern setzt Exchange dabei das LDAP-Feld "msExchUserCulture" im Active Directory. Dieser Service erspart es dem Benutzer, die Sprache in OWA erst auswählen zu müssen. - Quotas
Interessant könnte auch die Anwendung von Postfachgrenzwerden abhängig von Firmen oder Gruppenzugehörigkeiten sein. - Internet Settings (POP3, IMAP, OWA)
Über das Commandelt "Set-CASMailbox" könnte der E2K7RUS für geänderte Benutzer auch gleich diese Parameter einstellen.
Sie können an dieser Stelle quasi alle eigenen Erweiterungen addieren, um Benutzer korrekt zu konfigurieren, selbst wenn ein Operator den Benutzer mit den alten MMC-Tools oder Drittprodukten anlegt. Allerdings sind diese Funktionen noch nicht im Code vorhanden und müssten entsprechend entwickelt bzw. eingebunden werden.
Die Lösung und die Funktionsweise
Das Comandelt "SET-MAILBOX" hat mit Exchange 2007 SP1 den neuen Parameter "-ApplyMandatoryProperties" bekommen. Damit kann der Administrator eine einzelne Mailbox gezielt "updaten". Das Problem hierbei ist nur, dass auch dieses Comandlet keine Ahnung hat, welche Objekte nun neu oder geändert wurden.
Genau diese Logik liefert nun E2K7RUS.PS1 mit. An der Endung erkennen Sie schon, dass es sich um ein Powershell Skript handelt, welches man z.B. auf einem Server mit den Exchange 2007 Management Tools in der Exchange Laufzeitumgebung starten muss. Grob lässt sich folgendes Bild als Flussdiagramm zeichnen:

Die Funktion ist als ganz einfach umschrieben. Ein konfiguriertes AD-Objekt wird als Speicher für die zuletzt verarbeitete USN genutzt, um beim folgenden Aufruf einfach per Filter nur die Objekte zu verarbeiten, die neuer sind. Das Skript selbst wird aktuell per Windows Taskplaner regelmäßig mit einem Konto gestartet, der sowohl Schreibrechte auf das Hilfsobjekt hat, als auch "Exchange Recipient Administrator" ist, damit er alle für Exchange relevanten Attribute pflegen kann.
Fehlerverarbeitung
Das Skript
E2K7RUS bleibt im Gegensatz zum Exchange 2000/2003 RUS nicht bei Fehlern am
Objekt hängen. Fehler werden im Eventlog protokolliert und Sie müssen sich
selbst darum kümmern. E2K7RUS verarbeitet diese Objekte erst wieder, wenn
die USN sich geändert hat.
Wenn Sie daher Exchange 2007 im Einsatz haben und mit einer fremden Anwendung die Exchange Empfänger in ihrer Organisation pflegen, dann reicht für die Neuanlage eines neuen Benutzers das Füllen der folgenden Werte:
- AD-Benutzer per LDAP, MMC o.ä. anlegen
- ExchangeHomeServer mit dem DN des Postfachservers füllen
- HomeMDB mit dem DN der Datenbank füllen
- MailNickname entsprechend der Namenskonvention anlegen
- ExchangeMailboxGUID mit einer zufälligen GUID füllen.
Der erste Durchlauf von "SET-MAILBOX -ApplyMandantoryProperties" erledigt dann den Rest, um einen vollwertigen Benutzer daraus zu machen. Natürlich können Sie auch weitere Einstellungen (POP3, OWA, Quota etc.) vornehmen.
Download und Konfiguration
E2K7RUS ist ein Skript, welches nur in ganz speziellen Umgebungen sinnvoll
eingesetzt werden kann. Es ist kein Skript für jede Umgebung und kann auch
großen Schaden anrichten. Daher überzeuge ich mich lieber selbst von dem
geplanten Einsatzzweck.
Informationen, warum diese Skripte nicht öffentlich sind, finden Sie auf
nicht public.
Analog zum Exchange 2000/2003 RUS muss natürlich auch ein Skript, welches einen RUS nachbildet, konfiguriert werden. Leider sind die in Exchange 2000/2003 vorhandenen Konfigurationscontainer in einer reinen Exchange 2007 Umgebung nicht mehr vorhanden. Aber irgendwo muss ich mir ja speicher, was die letzte USN für eine Domain war und was liegt näher als das im Active Directory zu hinterlegen.
- Dienstkonto
Das Skript muss mit einem berechtigten Benutzer gestartet werden. Das ist besonders wichtig, wenn E2K7RUS als geplanter Tasks aufgerufen werde soll.. Wir legen also einen Benutzer an, mit welchem später das Skript (MSXFAQ.DE - Taskplaner) gestartet wird. - XML Konfiguration
Da USNs von DC zu DC unterschiedlich sind, ist es wichtig, dass alle Aktionen immer gegen den gleichen DC gefahren werden. Der DC ist genauso wie die Domain in einer XML-Datei zu hinterlegen ist im Skript zu hinterlegen. Sollte dieser DC nicht mehr zur Verfügung stehen, dann kann ein anderer DC eingetragen werden. Dann muss aber die LastUSN im Hilfsbenutzer auf 0 gesetzt werden, damit ein voller Durchlauf sicher alle Objekte erwischt. - Mehrere Domains
Wenn Sie mehrere Domains mit Exchange Empfängern einsetzen, dann müssen Sie natürlich auch das Skript entsprechend anpassen, damit die richtige Domain bearbeitet wird. Für jede Domain müssen Sie eigenständige Hilfsbenutzer und Skripte einsetzen.
Die Konfiguration erfolgt über eine XML-Datei, die als Parameter in der Kommandozeile mit angegeben werden muss
<e2k7rus> <mode>confirm</mode> <dc>e2007</dc> <domain>dc=e2k7,dc=msxfaq,dc=net</domain> <lastusn>0</lastusn> <laststart></laststart> <lastend></lastend> </e2k7rus>
Die Parameter bedeuten im einzelnen
-
mode (config)
Durch die Angabe von "confirm" zeigt E2K7 alle Objekte an, bei denen die Anwendung die Proxy Adressen verändert hat. Der Admin kann dann entscheiden, ob er weiter macht oder das Skript beendet. - dc (servername)
E2K7Rus muss immer den gleichen DC für die Domäne verwenden, da die USNs je DC unterschiedlich sind und sonst die Erkennung von neuen oder geänderten Objekten nicht funktioniert. Geben Sie hier den DNS-Namen des gewünschten DCs an - domain (dc=e2k7,dc=msxfaq,dc=net)
Geben Sie hier den DN der zu bearbeitenden Domäne an. - lastusn (Startwert = 0)
In diesem Feld speichert sich das Skript am Ende die höchste zuletzt verarbeitete USN ab, damit es beim nächsten Durchlauf einfach dort wieder aufsetzen kann. - laststart / lastend
Das Skript schreibt am Ende hier einen Zeitstempel des letzten Durchlaufs hinein. Sowohl die Startzeit als auch die Endezeit werden protokolliert. So können Sie nicht nur den letzten Durchlauf sondern auch den letzten Abschluss erkennen. Die Ausgabe wird aber nur bei erfolgreichem Ende des Skripts geschrieben.
Sie können also problemlos mehrere XML-Dateien anlegen und mit eigenen Zeitplänen aufrufen.
Aufruf: Einmal Update bitte
Starten Sie das Skript unbedingt in einer Powershell MIT Exchange Erweiterungen, Also über die Exchange Management Shell.
Der Aufruf muss dann mit einem Benutzer erfolgen, der zumindest "Exchange recipient Admin" ist. Er muss zudem auf die Exchange Server zugreifen können, da auch Exchange 2007 immer noch auf den MSExchangeAL auf dem Server zugreift.
Hier sieht man den Aufruf von E2K7RUS auf meiner Testumgebung, bei der der Benutzer "Test" anscheinend eine nicht konforme Proxy-Adresse hat. Das Skript liest zuerst die USN des letzten Durchlaufs aus und sucht dann alle neueren Objekte. Für diese Objekte startet es den "SET-MAILBOX" um die Daten zu aktualisieren.

Das Skript wurde "interaktiv" in der Betriebsart "confirm" aufgerufen. Daher gibt es mir die alten ProxyAddresses und die neuen Adressen untereinander aus und fragt mich, ab es mit den anderen Benutzern weiter machen darf.
Den aktuelle Benutzer hat SET-MAILBOX aber schon geändert. Wen dies also "falsch" wäre, dann müsste ich nun inne halten und die Änderungen manuell wieder Rückgängig machen. Leider gibt "SET-MAILBOX -WhatIf" nicht aus, was es tun würde. man muss also SET-MAILBOX erst wirken lassen und danach die Änderungen vergleichen. Denkbar wäre aber, dass man die Änderungen natürlich gleich wieder zurückschreibt.
In der Betriebsart "confirm" kann der Administrator beim ersten Lauf Benutzer für Benutzer durchgehen und bekommt für Benutzer, die geändert werden (also vorher nicht mit den Richtlinien konform waren) die Rückfrage und kann eingreifen.
Protokollierung
Natürlich protokolliert E2K7RUS jede Aktion, die er tut. Über die Funktion "Start-Transcript" wird jede Aktion, die auf der Console landet, zusätzlich in eine Datei abgespeichert.

Interessanter ist aber die Funktion des "Changelog", in dem E2K7RUS die Objekte protokolliert, welche beim Verarbeiten auch geändert wurden

Im Skript selbst ist der Name der Datei als Konstante hinterlegt. Es ist also problemlos möglich, alles in eine Datei zu schreiben. Mit wenig Aufwand könnte man diese Meldungen sogar per SYSLOG an ein Meldungssystem senden.
Überwachung und Monitoring - Eventlog
Programme und Skripte im Hintergrund werden schnell vergessen. Daher hat es sich unter Windows eingebürgert, dass solche Programme Fehler und Warnungen aber auch Erfolgsmeldungen einfach im Eventlog hinterlassen. Mit der Powershell ist dies sehr einfach möglich, wobei im Gegensatz zu VBScript sogar die Quelle selbst definiert werden kann. Entsprechend schreibt das Skript abhängig von den Debug-Level den Fortschritt in das Eventlog, so dass eine zentrale Überwachung möglich ist.

Folgende EventIDs kommen dabei zum Einsatz (Source ist immer E2K7RUS, Category ist immer "keine")
| Typ | ID | text | Beschreibung |
|---|---|---|---|
| Information | 0 | E2K7RUS gestartet | Zeigt den Start des Skripts an. Das Fehlen des Events kann z.B.: überwacht werden. |
| Information | 1 | E2K7RUS beendet | Zeigt das Ende des Skripts an. |
| Error | 2 | XML not loaded | Konnte XML-Datei nicht laden |
| Error | 3 | XML not saved | Konnte XML-Datei mit letztem USN nicht speichern |
| Information | 102 | LastUSN=$lastUSN | Zeigt an, welche LastUSN genutzt wird. |
| Information | 103 | Search done. Objects found $total | Suche hat angegebene Anzahl neuer Objekte zurück gegeben. |
| Information | 200 | Processing Object:$adspath | Anzeige des aktuell in Bearbeitung befindliches Objekt |
| Information | 201 | Start set-mailbox with: $nickname | Prüfpunkt vor dem Aufruf von "Set-Mailbox" |
| Error | 202 | Error bei set-mailbox User: $nickname Error:$error | Set-mailbox hat einen Fehler zurück gemeldet. Dies ist "normal", wenn es sich um eine Systemmailbox handelt. Ansonsten sollten Sie die Eventlog Meldung prüfen. |
| Information | 203 | set-mailbox executed with no error | Aktualisierung des Objekts ist anscheinend ohne Fehler durchgelaufen |
| Information | 204 | New ProxyAddress $proxy2 | Ausgabe der neu vergebenen ProxyAdressen |
| Information | 300 | Confirmation requested | Wenn die Betriebsart "confirm" aktiv ist, dann zeigt dieser Eintrag an, dass der Administrator gefragt wurde, ob die Änderungen OK sind |
| Error | 301 | Confirmation rejected. - Stop processing | Der Administrator hat die Verarbeitung abgebrochen |
| Information | 302 | Confirmation acceptet - continue processing | Der Administrator hat die Verarbeitung fortgesetzt. |
So können Sie die Funktion von E2K7RUS einfach mit handelsüblichen Überwachungsprogrammen (z.B.: MOM2005 etc. überprüfen.
Debugging
Wer noch mehr Debugging möchte, kann in der Powershell weitere Steuerungen einstellen. Per Default sind alle Debugoptionen aktiv. Suchen Sie nach folgenden Zeilen im Powershell Skript:
Start-Transcript -Path e2k7rus-$starttime.log -Append $ErrorActionPreference = "Continue" $verbosepreference = "Continue" $DebugPreference = "Continue" Stop-Transcript
Diese Zeilen sind nach der Prüfung an die örtlichen Gegebenheiten anzupassen:
- Start-Transcript
Dieser Befehl protokolliert alle Aktionen der Powershell in die angegebene Textdatei. Diese kann daher sehr umfangreich sein und sollte später deaktiviert werden. Analog dazu ist der befehl "Stop-transcrip" am Ende zu entfernen - $ErrorActionPreference, $verbosepreference, $DebugPreference
Diese Variablen bestimmen die Reaktion der Powershell bei den befehlen "Write-Verbose, Write-Error, Write-Debug" und das Verhalten bei einem Fehler. Meine Standarteinstellung im Skript gibt alles auf die Konsole aus. diese Variablen können folgende Werte annehmen: "SilentlyContinue", "Stop", "Continue", "Inquire". Für den automatischen Betrieb ist "Inquire" nicht geeignet, da niemand die Eingaben beantworten kann.
Zukünftige Planungen
- Funktion als Dienst
Aktuell steht auf meiner Planung nur die Funktion als Dienst - Eleganteres Logging
Implementation eines Debuglevel, um die Meldungen feiner abzustufen. - Filterung der Empfänger, indem vorab die Exchange 2007 Server gesucht werden
Weitere Links
- Exchange RUS
- E2K7 Empfängermanagement
- CheckExObjects
- Exchange 2007 objects are not stamped with ShowInAddressBook and
never end up in the GAL after a gal sync
http://blogs.msdn.com/dgoldman/archive/2007/05/24/exchange-2007-objects-are-not-stamped-with-showinaddressbook-and-never-end-up-in-the-gal-after-a-gal-sync.aspx - Evan Dodds - Microsoft Exchange Server Blog ApplyMandatoryProperties
http://blogs.technet.com/evand/archive/2007/02/28/applymandatoryproperties.aspx










