CheckExObjects
VBScript und 64Bit !
Viele 32bit COM-Objekte lassen sich auf einem 64bit System nur
instanziieren, wenn die 32bit Version von CSCRIPT/WSCRIPT genutzt wird,
welcher unter C:\Windows\SysWOW64\cscript.exe liegt.
Bei Exchange 2007/2010 ist CheckExObjects zum Teil in "Ger-Mailbox" und anderen Commandlets enthalten, die ebenfalls eine Warnung generieren, wenn bestimmte Felder nicht passen.
Die Aufgabe von CheckExObjects ist die Kontrolle aller Objekte im Active Directory hinsichtlich ihrer Exchange Konfigurationen. Dabei werden ALLE Objekte, die für Exchange relevant sein könnten, nacheinander ausgelesen und gegen ein umfangreiches Regelwerk geprüft. Die Ausgabe erfolgt in einer XML-Datei
Alle Skripte sind Muster ohne jede Gewährleistung oder Funktionsgarantie. für Schäden bin ich nicht verantwortlich. Achten Sie auf Zeilenumbrüche bei der Übernahme.
Folgende Objekte werden analysiert
- Benutzer
Sowohl mailaktive, mailboxaktivierte als auch Benutzer ohne Exchange Eigenschaften werden geprüft - Kontakte
Auch müssen alle "Exchange aktiven" Kontakte gültige Attribute haben, während alle anderen Kontakte keine Exchange Attribute haben dürfen - öffentliche Ordner
Ein Teil der Ordner sind sicher "Mail aktiviert" und hierfür sind einige Einstellungen erforderlich - Gruppen
Wenn Verteiler eine Mailadresse haben, dann sollten auch die anderen Einstellungen passen. - Abfragebasierte Verteiler (Erst ab Exchange 2003/Windows 2003
Auch diese "besondere" Gruppen sind zu prüfen, wenn vorhanden.
Das Script prüft ALLE diese Objekte daraufhin, ob diese für Exchange aktiviert sind. Dabei gilt:
- Exchange aktiviert
Die Objekte werden geprüft, ob wesentliche Felder korrekt gesetzt sind, z.B.: "mail", ProxyAddresses" und einige andere - nicht Exchange aktiviert
Die Objekte werden geprüft, ob sie korrekt "deaktiviert" sind. So darf z.B. in "ProxyAddresses" oder HomeMTA nichts mehr enthalten sein.
Das Skript gibt entsprechende Warnungen und Fehlermeldungen aus. Alle Daten werden in einer XML-Datei gespeichert und mit dem passenden XSL-Stylesheet auch einfach angezeigt. Hier ein Muster:
Die hier aufgezeigten Warnungen sind verständlich, da die Exchange Organisation noch im "mixed" mode ist und ein leere "msExchADCGlobalName" ein Zeichen für einen Fehlkonfiguration des ADC ist.
- "mail"
Es muss gefüllt sein und ein "@" enthalten - ProxyAddresses
Muss gefüllt sein. davon muss mindestens eine Adresse eine "SMTP-Adresse" sein. Zudem muss die primäre SMTP-Adresse mit dem Inhalt von Feld "mail" übereinstimmen - HomeMTA, HomeMDB
müssen vorhanden sein. Aktuell wird nicht geprüft, ob dies auch gültige Server sind. - relative distinguished Name <65 Zeichen
Der relative Objektename sollte unter 65 Zeichen liegen, da sonst der Prozess OABGEN Probleme macht. - msExchADCGlobalNames
Wenn erkannt wird, dass die Exchange Organisation noch im "Mixed"-Mode aktiv ist, dann wird vorausgesetzt, dass es noch Exchange 5.5 Server gibt und entsprechend jedes Objekt auch einen msExchADCGLobalNames haben muss. Ansonsten wird eine Warnung ausgegeben. - msExchPoliciesIncluded
Normalerweise werden alle Empfänger über den Exchange RUS und den entsprechenden Empfängerrichtlinien konfiguriert. Die angewendete Richtlinie steht in diesem Feld. - LegacyExchangeDN
Er muss z.B. mit "/O=" anfangen aber bei nicht mailaktiven Objekten sollte er leer oder auf ADCDisabledMail bzw ADCDisabledMailByADC stehen. - Und noch einige andere
Schauen Sie einfach selbst in den VBScript Code und Sie sehen, welche Tests noch durchgeführt werden.
Dabei werden Natürlich je nach Art des Objekts andere Prüfungen durchgeführt. Die Prüfungen für Kontakte und nicht Exchange aktivierte Objekte sind jedoch noch nicht sehr umfangreich.
Mitmachen !!
Das Script und die Ergebnisse sind Natürlich nur so gut, wie die
durchgeführten Tests. Wenn Sie daher ein Problem entdeckt haben, was durch
falsche Werte bei einem Empfängerobjekt verursacht wurde, dann schreiben Sie
mir bitte was falsch war, dass ich einen entsprechenden Test addieren kann.
Aufruf
Rufen Sie das Programm am besten in einer DOS-Box mit CSCRIPT auf.
C:\>cscript z:\CheckEXObjects.3.6.vbs
Das Skript stellt sicher, dass es nicht doch mit einem Doppelklick aus dem Explorer gestartet wird.
Ausgabe
Die Ausgabe von CheckExObjects erfolgt zur Kurzinformation auf dem Bildschirm. Damit wird der Fortschritt ersichtlich. Im Script selbst kann das Debugging über folgende Zeile konfiguriert werden:
objDebug.target = "file:6 console:2" ' errorlogging 0=only output, 1=Error 2=Warning 3=information 5++ =debug
Je höher die Nummer, desto ausführlicher die Ausgabe. Vermeiden Sie z.B. die Ausgabe ins Eventlog mit der Stufe 6, da dies den Server nicht nur langsamer macht, sondern da Eventlog sehr schnell voll sein dürfte.
Die eigentliche Ausgabe erfolgt im aktuellen Verzeichnis.
- checkexobjects-datum zeit.log
Debugausgabe zur Fehlersuche, wenn etwas nicht funktioniert. - checkexobjects-datum zeit.XML
enthält das Ergebnis der Analyse als XML-Datei - checkEXObjects.xsl
Stylesheet für die Anzeige mit dem Explorer. Wird immer wieder neu angelegt !. Sie können die Zeile aber im VBS entfernen
Der Inhalt der XML-Datei kann ab Version 3.0 über folgende Zeile konfiguriert werden:
const OUTPUTSELECTION = "ERROR WARN OK uNKNOWN" ' mögliche Einträge: ERROR WARN OK
Wenn Sie hier z.B. "OK" entfernen, dann werden nur noch Fehler, Warnungen und unbekannte Objekte in der XML-Datei ausgegeben. Das ist besonders hilfreich, wenn die Organisation sehr groß ist. bei 100.000 Objekten kommt sonst schon mal eine mehrere Megabyte große XML-Datei zusammen, die kaum noch mit dem Internet Explorer, Excel oder anderen Tools verarbeitet werden kann. für die Fehlersuche benötigen Sie nicht die fehlerfreien Objekte.
Ich bin natürlich nicht sicher, ob mein Skript entsprechend fehlerfrei ist. Allerdings finden bis auf die Ausgabe in Dateien keine Schreibzugriffe statt. für die Funktion ist ein Benutzer erforderlich, der im Active Directory "lesen" kann. Das kann eigentlich jeder Domänenbenutzer ohne weitere Berechtigungen.
ACHTUNG
Diese umfangreiche Analyse belastet den angesprochenen globalen Katalog sehr
stark!
Download
checkexobjects.3.6.vbs.txt
Bitte nach dem Download die Erweiterung .TXT entfernen und mit CSCRIPT
aufrufen.
In meinen TestUmgebungen und bei Kunden hat dieses Script bislang problemlos funktioniert. Trotzdem kann es sein, dass das Script unerwartet abbricht. Dies liegt oft an Sonderzeichen oder Inhalten im AD, die ich noch nicht abgefangen habe. Bitte setzen Sie dann das Debugging auf 6 und senden Sie mir die letzten Zeilen der Protokolldatei und die Zeilennummer des Fehlers des Scripting Hosts. -> Kontakt
Geplante Weiterentwicklung:
Die Tests sind ein Ergebnis vom "Suchen im System". Erweiterungen sind denkbar, z.B.:
- Bessere Prüfung von Inhalten
z.B. HomeMTA und HomeMDB können auf Existenz geprüft werden. Auch der Inhalte von msExchPoliciesExcluded kann weiter geprüft werden. Zudem müssen die verwendeten Mailadressen natürlich auch in den Empfängerrichtlinien sein, da ansonsten Exchange diese Adressen gar nicht erst annimmt. - 275636 Creating Exchange mailbox-enabled and mail-enabled objects in Active Directory
- Prüfung der Richtlinien GUID
Im Feld msExchPoliciesIncluded und msExchPoliciesExcluded können nur GUIDs von Objekten stehen, die auch vom den Empfängerrichtlinien vorgegeben werden. Das kann man prüfen - MasterAccountSID
Die externe SID eines deaktivierten Kontos darf normalerweise nur bei genau einem Objekt verwendet werden. Bis auf wenige Ausnahmen ist ein Fehler ein Hinweis auf Probleme. - publicDelegates und publicDelegatesBL
Überprüfung auf "gültige" Inhalte
Stellvertreter mit Outlook - SMTP-Adresse
Bis Exchange 2003SP2 sollte jede Mailbox, die OWA verwenden will, auch eine Mailadresse der Default Policy haben. Das kann geprüft werden. Ebenso gibt es wohl Probleme, wenn die SMTP-Domäne nicht genau der Richtlinie entspricht (Groß/Kleinbuchstaben) - X.400 Adresse
Der reguläre Ausdruck zu X.400 prüft nur die "häufigste" Art der Verwendung mit s= und g=. Wenn Sie auch Felder wie ou= verwenden und andere weglassen, dann meldet CheckExObjects einen Fehler - Mailduplikate
Wenn das Skript eh schon alle Empfänger abgrast, könnte es auch alle Mailadressen protokollieren und damit doppelte Adressen erkennen und melden. - Prüfung der Mailadresse
Meine neue Klasse ValidMail statt ValidSMTP erlaubt auch die Kontrolle von Notes und anderen Adressen. - PublicDelegateund PublicDelegadeBL
Auch die Eintragungen von Stellvertretern könnte das Skript auf "Gültigkeit" prüfen - Doppelte SMTP-Adressen
Der RUS passt bei der Vergabe von Adressen zwar auf, aber auch manuelle Änderungen können zu doppelte Adressen führen. Da CheckExObjects eh alle Adressen prüft, kann es auch auf doppelte Adressen prüfen. - ADCGlobalNames Behandlung
In einer gemischten Umgebung haben AD-Objekte, die in einer native Exchange 200x Site sind, keinen ADCGlobalNames mehr - Dublettenprüfung
Anscheinend gibt es speziell bei Exchange 5.5 öffentlichen Ordnern sehr oft mehrfach verwendete SMTP-Adressen.
Sie sehen, dass noch einige zusätzliche Tests möglich sind.
Weitere Links
- Querybased Distribution Group
- Querybased Groups
- ADSI und LDAP
- VBScript
-
Exchange 2010: HomeMTA and msExchHomeServerName are not Updated on
mailboxes
http://blogs.technet.com/b/timmcmic/archive/2011/09/26/exchange-2010-homemta-and-msexchhomeservername-are-not-updated-on-mailboxes.aspx -
Uniqueness requirements for attributes and objects in Active
Directory
https://blogs.technet.microsoft.com/389thoughts/2017/02/03/uniqueness-requirements-for-attributes-and-objects-in-active-directory/