Wie man der Liste der Benutzer aus Active Directory-Attribute wie Abteilung

Ich muss eine Suche in Active Directory mithilfe der Filter, wie z.B. Anzeige von name, Telefonnummer und Abteilung. Display name und Telefon sind einfach, aber ich bin stecken geblieben auf der Abteilung. Dies ist das bit, das funktioniert:

using (PrincipalContext context = new PrincipalContext(ContextType.Domain))
{
    UserPrincipal userPrincipal = new UserPrincipal(context);

    if (txtDisplayName.Text != "")
        userPrincipal.DisplayName = "*" + txtDisplayName.Text + "*";

    using (PrincipalSearcher searcher = new PrincipalSearcher(userPrincipal))
    {
        foreach (Principal result in searcher.FindAll())
        {
           DirectoryEntry directoryEntry = result.GetUnderlyingObject() as DirectoryEntry;
           DataRow drName = dtProfile.NewRow();
           drName["displayName"] = directoryEntry.Properties["displayName"].Value;
           drName["department"] = directoryEntry.Properties["department"].Value;
           dtProfile.Rows.Add(drName);
        }
    }
} 

Ich hatte gehofft, dass ich nur etwas hinzufügen wie:

DirectoryEntry userDirectoryEntry = userPrincipal.GetUnderlyingObject() as DirectoryEntry;
if (ddlDepartment.SelectedValue != "")
    userDirectoryEntry.Properties["title"].Value = ddlDepartment.SelectedValue;

Aber das funktioniert nicht. Wer weiß, wie kann ich das machen?

Bearbeiten:
Ich bin ein idiot, so verändert sich der Suchbegriff und die Antwort gefunden. Die zusätzlichen Felder sind aufgerufen attibutes. Dank Raymund Macaalay für Ihre blog-Artikel über eine Ausweitung der Prinzipien.

Meine erweiterte UserPrincipal:

[DirectoryObjectClass("user")]
[DirectoryRdnPrefix("CN")]

public class UserPrincipalExtended : UserPrincipal
{    
    public UserPrincipalExtended(PrincipalContext context) : base(context) 
    {
    }
    [DirectoryProperty("department")]
    public string department
    {
        get
        {
            if (ExtensionGet("department").Length != 1)
                return null;
            return (string)ExtensionGet("department")[0];
        }
        set { this.ExtensionSet("department", value); }
    }
} 
Schreibe einen Kommentar