Tools: MBQuotaReport

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.

Diese Skript funktioniert aktuell nur mit Exchange 2003, da es per WMI die Postfachgröße abfragt. für Exchange 2000 müsste dies per MAPI erfolgen.

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.

Dieses Skript funktioniert NICHT mit Exchange 2007/2010. Nutzen Sie hierzu bitte das Commandlet "Get-Mailboxstatistics". Siehe auch Hinweise weiter unten und auf der Seite DynQuota. Auch Exchange 2000 scheint die erforderlichen WMI-Klassen noch nicht zu unterstützen.

Achtung Exchange 2010 SP1
2480474 Users do not receive quota warning messages after applying SP1 für Exchange 2010
Exchange prüft nur noch Postfächer, in denen ein Flag gesetzt wird. Dieses wird vom Store gesetzt, wenn bei einer eingehenden Mail die Grüße auf 50% des "Senden Verbieten" gesetzt wurde. Wenn dann eine Nachricht erstellt wurde, wird das Flag wieder gelöscht und bei der nächsten Mail wieder gesetzt. Wurde aber nie ein "Senden Verbieten" gesetzt oder ist die erst "Warnung" auf weniger als 50% der Senden-Verbieten, gesetzt, dann löst der Trigger nicht aus.

Sie können das Problem, dass die Mitarbeiter immer mehr Nachrichten und Objekte in ihrem Postfach abspeichern und damit das Postfach und entsprechend die EDB/STM-Dateien immer größer werden. Auf Limits, oder wie kann ich Grenzen setzen steht, wie sie mit Grenzwerten auf Postfächer und Datenbanken diesem wilden Wachstum ein Ende setzen. Nur allein mit dem Setzen von Obergrenzen ist es nicht getan. Ohne entsprechende Hilfsmittel können Sie nur im Exchange System Manager pro Server einen Überblick erhalten, wie voll die Mailbox ist und welche Schwelle überschritten wurde.

Gerade mit mehreren Servern ist eine Liste über alle Server mit Anzeige der aktuell pro Mailbox gültigen Quota (und deren Ursprung) natürlich ein viel besserer Report. Und genau das liefert das Script MBQuotaReport.

Funktionsweise

Das Script holt sich per ADO-Abfrage alle Mailboxen in der Organisation und durchläuft jeden einzelnen Benutzer um folgende Aktionen auszuführen:

  • Auslesen der Quota-Einstellungen
    Normalerweise muss dazu über das Feld "homeMDB" der passende Informationsspeicher gefunden und von dort die Werte ausgelesen werden.
    Allerdings kann ein Benutzer auch abweichende Einstellungen beim Benutzerobjekt gespeichert haben.
  • Auslesen der Mailboxgröße
    Dann wird über eine WMI-Abfrage der Homeserver angesprochen, um die aktuelle Postfachgröße zu ermitteln.
  • Ausgabe der Daten
    Mit etwas Formatierung und Errechneten Werten (z.B. prozentuale Belegung) werden die ermittelten Daten in einer XML-Datei ausgegeben.

Was sich hier so einfach anhört, wird in größeren Umgebungen sehr langsam. Eine WMI-Abfrage an einen Server kann schon etwas dauern und die zur Ermittlung notwendigen sonstigen Werte sollten auch nicht immer mit einem "GetObject" abgefragt werden. Um Performance zu gewinnen, werden insgesamt drei Dictionary-Objekte eingesetzt, um die bereits ermittelte Daten zu speichern. So können z.B. mit einer WMI-Abfrage die Größe aller Postfächer eines Servers ausgelesen werden. Diese Daten werden quasi in einem Cache gehalten, so dass bei einer zweiten Abfrage sehr schnell die Daten aus dem Cache kommen.

Auch die Abfrage der Quotas auf einer Datenbank muss nur einmal erfolgen und kann für alle weiteren Objekte in der gleichen Datenbank ebenfalls aus dem Cache geholt werden. Das muss Natürlich selbst geschrieben werden.

Download und Aufruf

Für den Aufruf von MBQuotaReport ist es erforderlich, dass Sie zum einen im Active Directory die Benutzer per LDAP auslesen können. Weiterhin müssen Sie mindestens Exchange Readonly Administrator sein, damit das Skript die Quotaeinstellungen auf den Postfachspeichern und Richtlinien auslesen kann. Zuletzt müssen Sie auch lokaler Administrator über den Exchange Server sein, damit die Anfragen per WMI möglich sind.

MBQuotaReport.1.3.vbs

Auch dieses Script wird einfach mit CSCRIPT auf einem PC aufgerufen. Es muss dazu weder der Exchange Server sein, noch müssen die Exchange Admin Tools installiert sein. Das Script bedient sich allein LDAP-Abfragen per ADSI und Exchange Abfragen per WMI. Wenn Sie nicht alle Benutzer der gesamten Organisation auswerten wollen, dann sollten Sie im Sourcecode den LDAP-Filter für die Abfrage entsprechend anpassen. Eine GUI oder Kommandozeilen habe ich nicht implementiert.

Das Skript wertet im Moment nur aus, ob auf dem Store eine Policy gebunden ist aber schaut noch nicht genauer nach, was diese Policy auch vorschreibt. Bei Gelegenheit rüste ich das noch nach.

Ausgabe

Eine XML-Datei kann am einfachsten mittels passendem Stylesheet mit dem Internet Explorer ausgegeben werden. Alternativ können Sie auch mit Excel solche eine Datei öffnen und auswerten. Die Ausgabe mit dem Internet Explorer ist eine einfache Tabelle.

Auf einen Blick ist gut f��r jeden Benutzer zu erkennen, ob er noch im "grünen Bereich" ist, oder ob er schon verwarnt wird oder sogar schon die Funktion eingeschränkt ist. Zudem sehen Sie die für den Benutzer aktuell gültigen Grenzwerte und woher diese kommen. Die letzte Spalte zeigt die Belegung prozentual an.

Diese Ausgabe ist natürlich nur ein Muster und dank Stylesheets und XML können Sie die Daten natürlich problemlos anderweitig verarbeiten.

Bordmittel von Exchange

Der Vollständigkeit halber hier noch ein Bild, wie die gleichen Daten im Exchange System Manager angezeigt werden:

Der ESM zeigt die Größe der Postfächer sehr zeitnah aktualisiert an. Wenn Sie aber bei einem Benutzer "Quotas" aktivieren, dann wird die Anzeige erst nach längerer Zeit aktualisiert. Ich nehme an, das erfolgt erst dann, wenn Exchange seine "Maintenance" auf dem Postfachspeicher durchführt, um die entsprechenden Meldungen zu senden. Weder der Cleanup-Agent, noch der Mailboxmanager, DSCFLUSH oder ein stoppen und starten der Datenbank haben diesen Vorgang beschleunigen können. Nach dem Neustart des Dienstes "MSExchange Information Store" hingegen waren die aktuellen Werte auch in der Anzeige zu sehen.

Weiterentwicklung

Das VB-Skript unterstützt aktuell nur Exchange 2003,  da Exchange 5.5 als auch Exchange 2000 die aktuelle Größe der Mailboxen nicht einfach per WMI zur Verfügung stellen. natürlich könnte ich die Grö0e der Mailboxen auch per MAPI auslesen. Allerdings befürchte ich, dass ich hierzu nicht mehr kommen werde. Ebenso wäre es denkbar, diese Logik direkt im Script MBReport aufzunehmen.

Der Report ist eine Momentaufnahme aber erlaubt so erst einmal keine Anzeige von Trends. Wenn Sie nun aber hoffen, dass die nächste Version die Daten in einer Datenbank abspeichert, um historische Daten zu erhalten, dann muss ich sie enttäuschen. Es gibt aber entsprechende Produkte im Markt, die solch ein "Datamining" erlauben. Mit etwas Know-How können Sie natürlich auch mit dem Microsoft SQL-Server und den Reporting Services so etwas sehr einfach selbst entwickeln.

Das Script könnte auch dazu genutzt werden, eigene "Meldungen" an die Anwender zu versenden und damit die vorgegebenen "Warnmeldungen" von Exchange zu ersetzen.

Unterstützung durch Net at Work:
Diese Skript zeigt, wie einfach Exchange und das AD "anprogrammiert" werden kann, um Daten für den Betrieb zu erhalten. Sprechen Sie mit uns über ihre Anforderungen. Wir finden eine Lösung. Net at Work Lösungen

Exchange 2007/2010

Exchange 2007 enthält ähnliche Funktionen bereits in der PowerShell. natürlich sind diese Funktionen noch nicht so ausgereift wie ein eigens für diesen Zweck entwickeltes Skript. Aber auch die eingebauten Commandlets liefern aussagekräftige Daten, die sich zumindest auf die Einstellungen der Benutzer beziehen.

Get-Mailbox Quotas

Die Liste aller Benutzer können Sie samt ihrer Einstellungen auch in eine CSV-Datei schreiben lassen.

get-mailbox -resultsize unlimited `
| select alias,primarysmtpaddress,UseDatabaseQuotaDefaults, `
    @{expression={$_.ProhibitSendQuota.Value.ToMB()};label="ProhibitSendQuotaMB"}, `
    @{expression={$_.ProhibitSendReceiveQuota.Value.ToMB()};label="ProhibitSendReceiveQuotaMB"}, `
    @{expression={$_.IssueWarningQuota.Value.ToMB()};label="IssueWarningQuotaMB"} `
| export-csv .\quotareport.csv -notypeinformation

Allerdings sehen Sie hier erst einmal nur die aktuell beim Benutzer eingestellten Quotas. Werden die Quotas über die Datenbank vergeben, dann sind hier in der Regle keine Quotas sichtbar obwohl weiterhin welche wirken. Auch die aktuelle Größe der Mailbox ist so nicht auslesbar. Hier hilft dann wieder Get-MailboxStatistics weiter. Beachten Sie zusätzlich den Wert "UseDatabaseQuotaDefaults"

Get-MailboxStatistics `
| where {$_.StoragelimitStatus -ne "BelowLimit"} `
| ft display*,*limit* `
| out-file report.txt

Es ist also relativ einfach, sich die beiden Listen zu erzeugen und dann zusammen zu führen.

Ein passenden Skript möchte ich gerne noch nachreichen.

Warnmeldungen anpassen

Bei Exchange 2007/2010 kann ein Administrator sogar die Warnmeldungen der Benutzer anpassen.

z.B. mit:

New-SystemMessage `
   -QuotaMessageType WarningMailbox `
   -Language de `
   -Text "Ihre Mailbox hat die erste Warnschwelle erreicht. bitte archivieren Sie alte Nachrichten oder fordern Sie eine Vergrößerung an."

Alternativen

Eine einfache Auswertung der Postfachgrößen und aktuell wirksamen Quota-Einstellungen finden Sie auch im Exchange 2003 Systemmanager: Sie müssen allerdings über "Ansicht - Spalten hinzufügen/entfernen" erst die "Speichergrenzwerte" anzeigen lassen.

Und diese Liste können Sie sogar über "Aktion - Liste exportieren" exportieren. Für eine Stichprobe ist dies oftmals schon ausreichend.

Wenn Sie lieber eine ASP-Seite für Informationen über eine Mailbox nutzen wollen, dann ist der Beispielcode von Lee Derbyshire vielleicht eine gute Startplattform

Diese ASP-Seite könnten Sie auf einem Intranet natürlich für Support/Helpdesk bereitstellen. Das Skript selbst könnte mit "privilegierten Rechten" die Größe der Mailboxen auslesen, während der Zugriff auf die IIS-Seite dann über eine Sicherheitsgruppe nur für einen bestimmten Personenkreis zugelassen wäre.

Allerdings ermittelt diese Beispielskript aktuell nicht die Quota-Einstellungen und eignet sich nicht für die Archivierung der ermittelten Daten für spätere Vergleiche.

Alarmierung bei Grenzüberschreitung

Natürlich konnte man MBQuotaReport auch noch täglich laufen lassen und mit einer Logik versehen, um die Benutzer oder deren Vorgesetzte (AD-Feld: Manager) zu warnen und zu informieren. Wichtig ist hier aber auch die Eventlogüberwachung: Exchange protokolliert sehr wohl, wenn jemand seine Grenze erreicht hat.

Event Type: Warning
Event Source: MSExchangeIS
Event Category: General 
Event ID: 8528
Date: 16.01.2008
Time: 15:15:58 User: N/A
Computer: SRV01
Description:

The mailbox für /o=Org/ou=AG/cn=Recipients/cn=fcarius has exceeded 
the maximum mailbox size. This mailbox cannot send or receive messages
Incoming messages to this mailbox are returned to sender. The mailbox 
owner should be notified about the condition of the mailbox as soon as possible.

Bei Exchange 2016 ist die Eventlog-Meldung eine andere

Log Name:      Application
Source:        MSExchangeIS
Event ID:      1077
Task Category: MAPI
Level:         Warning
Description:
The mailbox <guid> on database <guid> is approaching its storage limit. 
A notification has been sent to the User. 
This warning will not be sent again for at least twenty four hours.

Leider muss man da natürlich erst die GUID mit einem "Get-Mailbox" auf einen sprechenden Namen umsetzen.

Spätestens dann sollte die ein oder andere Alarmglocke schellen und der Benutzer unterstützt werden.

Weitere Links