FixNotesItems

VBScript und 64Bit !
Viele 32bit COM-Objekte lassen sich auf einem 64bit System nur instanzieren, wenn die 32bit Version von CSCRIPT/WSCRIPT genutzt wird, welcher unter C:\Windows\SysWOW64\cscript.exe liegt.

Seit Exchange 2007 gibt es die TransporterSuite, welche die Übernahme von Daten aus Notes nach Exchange bei einer Migration erleichtert. Nachdem ich nun schon mehrere Migrationen geschafft habe kann ich sagen, dass nicht alle Informationen korrekt übertragen werden. Das ist besonders dann störend, wenn die Transporter Suite einfach nur "Fehler" meldet, aber keine Details dazu offenbart, welche Elemente nun nicht übertragen werden konnten. Mit etwas Suchen und verschiedenen Tests kann man aber die Übeltäter recht einfach dingfest machen. Meist sind es Feiertage, Jahrestage, Erinnerungen, besondere Termine und andere Objekte, die bei der Migration zu Fehlern oder Warnungen führen.

Prüfen Sie, ob die hier durchgeführten "Korrekturen" mit der aktuellen Version der Transporter Suite noch erforderlich sind. Microsoft entwickelt due Transporter Suite in eigenen Intervallen weiter, so dass das ein oder andere Problem schon gefixt sein kann.

Quelle putzen

FixNotesItems verbindet sich per Notes COM-API (ein installierter und mit Notes.INI versehener Notes Client ist Voraussetzung) auf die per Parameter übergebene Datenbank. Der aufrufende Benutzer muss die Berechtigungen für den Zugriff auf dieses Datenbanken haben. Dann nutzt das Skript den "AllDocuments"-View, um eine Liste aller Objekte zu erhalten.

Dankbar wäre auch eine Einschränkung auf andere Views wie z.B. "$Calendar", was im Bezug auf Termine das Tempo sicherlich erhöht hätte. Aber hierbei habe ich immer nicht alle Objekte gefunden.

Für jedes Objekt prüft FixNotesItems die Probleme und korrigiert diese, soweit möglich. Dazu gibt es aktuell folgende Parameter

Original AppointmentType Änderung Beschreibung
0 = Normaler Termin Keine Änderung Diese Standardtermine migriert die Transporter Suite meist problemlos
1 = Jahrestag AppointmentType=2 Jahrestage kennt Exchange so nicht und meldet einen Fehler bei der Migration. Die Umsetzung in einen ganztägigen Termin übernimmt den Termin. Allerdings ist dieser in Outlook dann "unter Vorbehalt" zugesagt. Notes kennt Leider nur "belegt" ("BookFreeTime=1") oder Frei/Vorbehalt. Das kann aber nachfolgend gefixt werden (Siehe Tentative2Free)
2 = Ganztägig Keine Änderung Diese Standardtermine migriert die Transporter Suite meist problemlos
3 = Besprechung keine Änderung Diese Standardtermine migriert die Transporter Suite meist problemlos
4 = Erinnerungen AppointmentType=2 Die Transporter Suite meldet auch diese Elemente als "Warning". Konvertiert man diese auch in einen ganztägigen Termin, dann kommen diese Elemente ebenfalls mit

Es gibt sicher noch weitere Dinge, die bei der Migration zu Fehlern führen, aber mit dem Tool "FixNotesItems" noch nicht gelöst werden können. Sie sehen auch, dass es für die Microsoft Entwickler schwer ist, alle möglichen Kombinationen zu erstellen, die nicht mal in den Notes Programmieranleitungen zu finden sind. Insofern bin ich sicher, dass zukünftige Migrationen mir noch weitere Dinge aufzeigen werden, die vorab zu korrigieren sind.

Einsatz und Aufruf

Auch wenn FixNotesItems ein VBScript ist, so benötigt es zuerst einen installierten Notes Client. Zudem wird die Datenbank, der Servername, ein optionales Kennwort und die gewünschten Aktionen über Kommandozeilen angefordert. Hier ein Beispiel:

cscript FixNotesitems.1.0.vbs
  /nsffile:"C:\Programme\lotus\notes\data\AdminMail.nsf"
  /cmd:"FixRepeatunit,FixAppointment,removeholiday"

Der Aufruf mit CSCRIPT ist ratsam, damit die Bildschirmausgaben nicht als Messagebox bestätigt werden müssen. Die Parameter bedeuten im Einzelnen:

Wird das Skript ohne Parameter aufgerufen, dann erscheint eine kurze Hilfe

"Aufruf: FixNoesItems /server:<NotesServer> /nsffile:<Quelle> /csvffile:<Ziel>"
""
"Required:	/nsffile:""mail/username.nsf"" or ""c:\pfad\datei.nsf"
"Optional:	/server:<NotesServer> leave empty for local files"
"Optional:	/password:""verySecurepassword"""
	wscript.echo "Optional:	/cmd:""command1,command2,command3"""

Wird das Skript ohne Kommando-Parameter aufgerufen, dann durchläuft es aber alle Objekte und zeigt den Betreff (Subject) mit an.

ReadOnly by Default
Werden die Kommandos nicht "GROSSGESCHRIEBEN", dann startet das Skript zwar die Module aber arbeitet nur lesend, d.h. es wird nichts korrigiert. Ideal, um die eigenen Berechtigungen zu prüfen und die Ausgaben zu analysieren.

Damit ist sichergestellt, dass nur dann etwas geändert wird, wenn wirklich etwas zu ändern ist.

Ausgabe

Die Ausgabe erfolgt nicht nur auf dem Bildschirm, sondern auch im Dateisystem. Eine Debug-Datei protokolliert alle Bildschirmausgaben während eine Logdatei die entsprechenden Elemente und damit verbundenen Aktionen protokolliert:

Weiterhin wird pro NSF-Datei eine eigene CSV-Datei angelegt.

CSV Report

Download

Download noch nicht verfügbar. Bitte sprechen sie mich bei Interesse an.

Offen

Weiterentwicklungen sind geplant, wie diese bei weiteren Notes Migrationen erforderlich werden. Auf meiner Agenda steht dazu

Powershell

Ich habe natürlich auch versucht, das ganze als "Powershell" Skript zu machen. Aber anscheinend ist auch hier wieder das gleiche COM-Problem, wie mit CDO (MTATHREAD). Folgende Zeilen funktionieren daher nur bis zur Verbindung der Datenbank:

Powershell mit Notes COM

$nsession = new-object -com "Notes.NotesSession"
$nsession.initialize

$db=$nsession.GetDatabase("","c:\notes\adminmail.nsf")

Bei der Datenbank kommt dann die lapidare Meldung, dass die Methode "GetDatabase" nicht verfügbar ist.

Weitere Links

Keywords:Notes Migration