PSTCapture & System.InvalidCastException

Wie einigen eventuell bereits bekannt ist, gibt es des Öfteren ein Problem bei der Migration von PST Dateien, mit Hilfe von PST Capture, in neue Exchange Mailboxen. Wir haben eine Lösung für diese Probleme gefunden:

 

Neben der richtigen Definition von Berechtigungen für die PST-Dienste, gibt es ein Problem das auftritt, wenn PST Capture versucht die aus dem AD herausgelesenen User innerhalb von PST Capture weiter zu verarbeiten. Dabei tritt folgende Fehlermeldung, zu sehen im PST Capture Logfile sowie im Event Log, auf:

EVENT ID: 32

CentralService

Error occured in get mailbox update check

System.InvalidCastException: Specified cast is not valid.

   at System.Data.SQLite.SQLiteDataReader.erifyType(Int32 i, DbType typ)

   at System.Data.SQLite.SQLiteDataReader.GetString(Int32 i)

   at RedGate.PSTImporterForExchange.Engine.Repository.DbMailbox.GetMailboxes(Boolean is365)

   at RedGate.PSTImporterForExchange.Engine.Repository.RepositoryMailbox.GetMailboxes(Boolean is365)

   at RedGate.PSTImporterForExchange.CentralService.PstCentralService.DoADPoll(Object state)

Um das Problem im genaueren zu betrachten, benötigen wir das Programm SQL Lite Database Browser. Mit diesem Programm können wir die von PST Capture zur Laufzeit erzeugte Datenbank (Vorsicht: Wird nach jedem Dienstneustart auch wieder neu generiert) einsehen. Dort müssen wir nun in der Tabelle Mailboxes in der Spalte nbname (eventuell auch in anderen Spalten) manuell nach dem ausgegrauten Wert NULL suchen – Vorsicht, der Filter nach dem Wert NULL liefert kein Ergebnis, daher manuell suchen.

Die SQL Query von PST Capture erzeugt eine Exception die von diesen NULL-Einträgen verursacht wird. Die Datenbank kann den Wert NULL nicht zum Vergleich des Users heranziehen. In Folge dessen schlägt die Datenbank-Operation mit einer Invalid Cast Exception fehl. Diese Exception wird in dem Moment erzeugt, in dem man in der PST Capture Konsole unter On-Prem PST-Import-List auf „Select mailboxes“ klickt.

Darum müssen wir diese NULL-Werte eliminieren – da die Datenbank allerdings zur Laufzeit (nach dem Start des Dienstes) neu erzeugt wird und die händische Veränderung in der Datenbank dadurch keinen Effekt zeigt, müssen wir direkt im AD die nötigen Änderungen vornehmen.

 

In unserem Fall handelte es sich bei den NULL-Werten um den Login Namen der User, der durch doppelte Einträge von SMTP Adressen zustande gekommen ist. Hierbei handelte es sich um jeweils ein AD-Kontakt und AD-User, die die gleiche SMTP Adresse aufwiesen.

PST-Capture sucht nach der SMTP Adresse und liest dann den LOGIN Namen aus dem AD-User Objekt per LDAP Query aus. Der AD-Kontakt besitzt aber leider keinen NetBios Login-Namen was zur Folge hat, dass der Datenbank-Eintrag mit dem Feld NULL befüllt wird. Daher müssen wir nun händisch entweder jeden AD-Kontakt, der betroffenen User, oder jede SMTP Adresse, im Kontakt-Objekt, aus dem AD heraus löschen.

 

Nun sollte es funktionieren.

Kommentar schreiben

Kommentare: 0