Bearbeite gerade ein Fehlerprotokoll von einem Active Directory Import, welches beim Versuch, zum Benutzerobjekt zu binden
Set objUser = GetObject(“GC://” & strDN)
einige Fehler E_ADS_BAD_PATHNAME auswirft. Die Referenz zum Benutzer (“strDN”) kommt aus einer Abfrage des Active Directory mit dem ADsDSOObject. Die fehlerhaften Benutzer enthalten doch tatsächlich in ihrem “distinguishedName” Schrägstriche, also ungefähr so
CN=Pohle\, Christian – bis 31/12/2010,OU=…
Interessant dabei ist, daß die Schrägstriche nicht als Special Characters zurückgegeben werden, wie z.B. das Komma, das als “\,” zurückgeliefert wird. Eine Suche im Internet fördert einen Artikel zutage, der dieses Problem auch behandelt und darauf hinweist, daß der Schrägstrich (“Slash”) im einschlägigen Microsoft Artikel nicht behandelt wird:
Dieser Microsoft Artikel aus der MSDN allerdings listet den Forward Slash als Special Character auf, erklärt aber nicht, warum dieser dann vom ADsDSOObject nicht auch schon escaped zurückgegeben wird:
Eine mögliche Erklärung liegt vielleicht im Änderungsdatum: Der Microsoft Artikel ist vom 7.7.2009 und der Artikel von Tomek ist vom 27.12.2006 – wahrscheinlich hat Microsoft inzwischen seinen Artikel überarbeitet aber natürlich nicht die Möglichkeit gehabt, das ADsDSOObject via Patches zu überarbeiten – nur eine Theorie. ADSIEdit und andere Tools liefern die Schrägstriche übrigens auch einfach unescaped zurück.
Nachdem ich zuerst überlegt hatte, die ganze Leseroutine auf GUID umzustellen (was aufwändiger gewesen wäre) habe ich als nächstes versucht, die Abfrage über den ADsPath vorzunehmen (Dabei viel mir auf, daß dieser den Slash sehr wohl escaped zurückliefert!), aber auch dazu hätte ich an der Importroutine einiges ändern müssen.
So bleibt es bei der einfachen Lösung: Wenn das ADsDSOObject nicht escaped, dann machen wir’s halt selbst:
‘ Add Escape Character to DNs containing Slashes
strDN = Replace(strDN, “/”, “\/”)
Natürlich könnte man auch darüber diskutieren, ob es Sinn macht, im distinguishedName eines Benutzerobjekte Schrägstriche zu verwenden, aber die hier gezeigte Lösung ist einfacher…