Das Active Directory ist ein LDAP-Speicher und damit werden solche "Pfadangaben" eigentlich als DSN (Distinguished Names) angegeben, in Deinem Fall z.B.
CN=User.Identity.Name,OU=SpezielleGruppe,OU=Gruppe,OU=ÜbergreifendeGruppe,OU=Benutzer,DC=domaene,DC=de. Damit sollte ein Systemadministrator eigentlich auch zurechtkommen
.
Den Pfad kannst Du über die DirectoryServices von .NET bekommen. Dazu musst Du allerdings die Assembly "System.DirectoryServices" referenzieren.
Hier gibt es zu den einzelnen Tasks Beispielcode, hab jetzt direkt auf das DirectorySearchen verwiesen. Folgenden Code habe ich der zum Verständnis auf de für Dich relevanten Teile gekürzt:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23:
| public string GetObjectDistinguishedName(string objectName, string LdapDomain) { string distinguishedName = string.Empty; string connectionPrefix = "LDAP://" + LdapDomain; DirectoryEntry entry = new DirectoryEntry(connectionPrefix); DirectorySearcher mySearcher = new DirectorySearcher(entry);
mySearcher.Filter = "(&(objectClass=user)(|(cn=" + objectName + ")(sAMAccountName=" + objectName + ")))"; SearchResult result = mySearcher.FindOne();
if (result == null) { throw new NullReferenceException ("unable to locate the distinguishedName for the object " + objectName + " in the " + LdapDomain + " domain"); } DirectoryEntry directoryObject = result.GetDirectoryEntry(); distinguishedName = "LDAP://" + directoryObject.Properties["distinguishedName"].Value; entry.Close(); entry.Dispose(); mySearcher.Dispose(); return distinguishedName; } |
Diese Methode übergibst Du den Benutzernamen und den Domänennamen und solltest den DSN dann erhalten.
//EDIT: Kleine Anmerkung: Prüfe, ob Du von Identity.User den Benutzernamen inkl. Domänennamen (z.B. domaene\benutzer) erhältst. Wenn ja, musst Du den Domänenteil vorher entfernen.