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