Tools: TerminCount

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.

Mit Exchange 2007/2010 können Sie in gewissem umfang einen Teil der Informationen über das Commandlet "Get-MailboxStatistics" erhalten. Siehe weiter unten.

Das "Problem" wurde in Exchange 2000/2003 schon gefixt aber auch mit dem Exchange 2007 SP1 immer noch aktuell. Prüfen Sie daher vor der Migration, ob es entsprechende Konten gibt. Erst Exchange 2007 SP1 Rollup1 soll das Problem lösen.

Beachten Sie dazu auch das Tools CalCheck - Calendar Checking Tool von Microsoft

Alternativ auch das PowerShell-Sample von Glen Scales
How To Series Sample 7 : Reporting on Calendar Appointments with Attachments in EWS and PowerShell
http://gsexdev.blogspot.de/2012/08/how-to-series-sample-7-reporting-on.html

Das Problem

Wussten Sie schon, dass Exchange 2000/2003 Probleme mit mehr als 1300 wiederkehrenden Terminen in einem Postfach hatte ?. Diese Problem wurde mit Exchange 2000 in einem Service Pack gefixt und für Exchange 2003 mit dem SP2 gelöst. Nur wurde der Code für Exchange 2007 wohl etwas früher abgespalten, so dass das Problem in Exchange 2007 SP0 wieder aktuell ist.

Das Ergebnis ist aber nicht nur, dass die Anwender Probleme beim Speichern von wiederkehrenden Terminen haben, sondern dass Exchange ebenfalls mit seinem "Agenten" damit ein Problem hat. Das kann soweit gehen, dass der Server immer wieder versucht etwas zu schreiben und aufgrund des Fehlers dies immer wieder versucht mit dem Ergebnis, dass die Transaktionsprotokolle sehr schnell anwachsen.

Eine Lösung für dieses Problem kann ich ihnen nicht bieten, aber Sie können dieses Problem vorhersehen, wenn Sie wissen, wie viele Termine im Kalender ihrer Mitarbeiter zu finden sind. Aus dem Skript TerminPatch habe ich daher das Skript "Termincount" abgeleitet, welches einfach die Termine in den Postfächern zählt und in einer XML-Datei anzeigt.

Funktionsweise

Das VBScript sollten Sie am einfachsten auf einem Exchange Server starten, da es damit direkt die Exchange 2000/2003 Server CDO nutzen kann und Outlook Sicherheitswarnungen entfallen. Auf Exchange 2007 gibt es keine CDO. Hier müssen Sie erst die CDO nachinstallieren oder von einem anderen PC aus den Aufruf durchführen. Das Skript liest aus dem Globalen Katalog alle Postfächer ihrer Organisation aus und verbindet sich dann mittels CDO1.21 mit jedem einzelnen Postfach.

Damit dies funktioniert, muss der ausführende Anwender natürlich die erforderlichen Berechtigungen (Siehe Mailboxrechte) besitzen. Zudem muss er in der Exchange Organisation zumindest "READ"-Rechte haben, damit das Skript auf Basis des HomeMDB den Namen des Servers ausfindig machen kann.

Das Skript durchläuft jedes Postfach und verbindet sich gezielt mit dem Kalender um darin dann alle wiederkehrenden Termine zu suchen und die Summe in einer XML-Datei zu berichten. 

Wenn Sie das Skript auf bestimmte Postfächer oder Server eingrenzen wollen, ist aktuell der LDAP-Suchfilter im Script selbst zu editieren. Es gibt keine grafische Konsole oder Kommandozeile.

Download und Aufruf

Dieses Skript ist kein öffentlicher Download
Informationen, warum diese Skripte nicht öffentlich sind, finden Sie auf nicht public.

Bitte haben Sie Verständnis, dass ich aufgrund des hohen Missbrauchspotential solcher Skripte diese nicht an IT-Dienstleister oder externe Consultants abgebe, sondern idealerweise der IT-Leiter oder Geschäftsführer dieses Skript anfordert.

Unterstützung durch Net at Work:
Alternativ können Sie natürlich auch eine umfangreichere Analyse beauftragen. Rufen Sie einfach an.

Sie können das Skript gerne als Administrator oder anderweitig verantwortliche Person erhalten. Schreiben Sie einfach eine Mail von ihrem Firmenaccount an mit dem Betreff "MSXFAQ: Termincount" und vergessen Sie nicht die Angabe ihres Namens der Adresse und ihrer Funktion. Bitte haben Sie Verständnis, dass ich diese Skript nur an IT-Leiter o.ä. abgebe, damit man mir keine Vorwürfe machen kann, ich würde Hackerwerkzeuge verteilen.

Sammeln der Daten

Der erste Schritt ist das Sammeln der Daten von allen Postfächern. Eventuelle Einschränkungen auf Postfächer müssen Sie im Source direkt vornehmen.

cscript termincount.vbs

Die Laufzeit des Scripts hängt direkt von der Größe der Postfächer, der Performance ihres Servers und des ausführenden PCs ab.

Das Skripte zeigt in der CMD-Box die aktuellen Aktivitäten an.

Das Script zeigt den Fortschritt in einem Internet Explorer Fenster an, welches sie nicht beenden dürfen. Anhand der Gesamtanzahl der Postfächer, und der für die bisher abgeschlossenen Postfächer verbrauchte Zeit wird eine Schätzung der Endezeit vorgenommen, die natürlich bei ungleich verteilen Mailboxen und Servern nicht sehr genau sein kann. 

Anzeige im Internet Explorer

Klicken Sie einfach direkt die XML-Datei an. In der XML-Datei ist das passende Stylesheet hinterlegt, welches vom VBScript auch bei jedem Lauf wieder angelegt wird.

Man sieht ganz deutlich, dass ich zwar schon 3176 Termine in meinem Kalender angehäuft habe, aber nur 31 davon "wiederkehrend" sind. Ich kann also ziemlich "problemlos" auf Exchange 2007 verschoben werden.

Einzelplatzlösung und öffentliche Kalender

Das Skript ist für die Überprüfung vieler Postfächer in einer Exchange Organisation gedacht. Es kann aber nur Postfächer überprüfen und ist vom Einsatz nicht ganz trivial. Wenn Sie nur mal schnell einen Ordner in ihren Postfach, einen öffentlichen Ordner oder in einem verbundenen Postfach prüfen wollen, dann kann ihnen folgendes VBA-Makro weiter helfen, welches sie einfach im Outlook Makroeditor starten können. Es startet einen Dialog zur Auswahl der fraglichen Ordners und gibt am Ende die Anzahl der Termine insgesamt und der wiederkehrenden Termine aus:

Sub CountRecurrentAppointments()
    ' counting all recurrent Appointments
    
    Dim objfolder As MAPIFolder
    Set objfolder = Outlook.GetNamespace("MAPI").PickFolder
    
    If objfolder.DefaultMessageClass <> "IPM.Appointment" Then
        MsgBox "Please select a calendar folder"
        Exit Sub
    End If
    
    Dim Item As AppointmentItem
    Dim count As Integer
    Dim recurring As Integer
    count = 0: recurring = 0
   
    Dim colitems As items
    Set colitems = objfolder.items
   
    Set Item = colitems.GetFirst()  ' Get first element
    Do While Not Item Is Nothing
        Debug.Print "Processing:" & Item.subject
        count = count + 1
        If Item.IsRecurring Then recurring = recurring + 1
        Set Item = colitems.GetNext()
    Loop
    
    
    MsgBox ("CountRecurringAppointments" & vbCrLf & _
            "Appointments Total    :" & count & vbCrLf & _
            "Appointments recurring:" & recurring)
End Sub

Exchange 2007

Wenn Sie ihre Benutzer allerdings schon auf Exchange 2007 migriert haben, dann können Sie auch über die dort vorhandenen Commandlets entsprechende statistische Aussagen machen. Das Commandlet "Get-MailboxStatistics" von Exchange 2007 erlaubt eine Auswertung bezüglich der Ordnergröße und Anzahl.

get-mailbox | `
   Get-MailboxFolderStatistics `
      -FolderScope calendar | `
   select identity,itemsinfolder

Allerdings wird hier nicht zwischen wiederkehrenden Serienterminen und normalen Terminen unterschieden. Insofern sind die Aussagen nicht ausreichend. Aber Termincount kann auch mit Exchange 2007 arbeiten. Beachten Sie aber die Hinweise auf MAPI/ExtendedMAPI bezüglich CDO und Exchange 2007

Weitere Links