2016-08-19 3 views
0

Ich habe eine Anwendung, die verwendet werden kann, um entweder AD-Attribut extensionAttribute2 zu setzen oder zu löschen.So löschen Sie Erweiterungsattribute

Alles scheint gut zu funktionieren, aber nach der Aktualisierung meiner Ode, um die Property.Clear() Methode zu verwenden, wenn ich das Attribut löschte, stieß ich auf einige Probleme.

Nach ActiveDirectory.ClearProperty("user.name", "extensionAttribute2") Aufruf, wird diese Eigenschaft gelöscht, aber wenn ich es mit ActiveDirectory.GetProperty("user.name", "extensionAttribute2", "123456789") Versuchen Sie, bekomme ich einen Fehler:

Object reference not set to an instance of an object.

Und ich kann sehen, dass die extensionAttribute2 für die im DirectoryEntry Objekt nicht geladen wurde Benutzer.

Wenn ich den Code in ClearProperty ändern user.Properties[property].Value = " "; rufen dann erscheint es in Ordnung (das heißt die Eigenschaft, immer noch vorhanden ist, wenn der Benutzer wieder die Abfrage) zu arbeiten, aber ich fühle, dass Clear() verwenden.

Ist das normales Verhalten für AD? Ich habe den Eindruck, dass der Aufruf Clear nur den Wert löscht, anstatt die Eigenschaft tatsächlich zu zerstören, oder ist das ein Feature von extensionAttribute s? Ich würde gerne Clear verwenden, wie es klarer aussieht - scheint dies vernünftig oder ist mit user.Properties[property].Value = " "; wirklich die beste Option haften?

Vielen Dank im Voraus für jede Hilfe.

private static DirectoryEntry GetUser(string friendlyName) 
{ 
    var userEntry = new DirectoryEntry("LDAP://dc=DOMAIN,dc=co,dc=uk"); 
    var mySearcher = new DirectorySearcher(userEntry) 
    { Filter = $"(cn={friendlyName})" }; 

    mySearcher.PropertiesToLoad.Add("extensionAttribute2"); 
    mySearcher.PropertiesToLoad.Add("distinguishedName"); 

    var userSearchResult = mySearcher.FindOne(); 
    var distinguishedName = userSearchResult.Properties["distinguishedName"][0].ToString(); 
    var userDirectoryEntry = new DirectoryEntry($"LDAP://{distinguishedName}"); 

    return userDirectoryEntry; 
} 

public static string GetProperty(string friendlyname, string property) 
{ 
    var user = GetUser(friendlyname); 
    return user.Properties[property].Value.ToString(); 
} 
public static void SetProperty(string friendlyName, string property, string value) 
{ 
    var user = GetUser(friendlyName); 
    user.Properties[property].Value = value; 
    user.CommitChanges(); 
} 

public static void ClearProperty(string friendlyName, string property) 
{ 
    var user = GetUser(friendlyName); 
    user.Properties[property].Clear(); 
    user.CommitChanges(); 
} 

Antwort

0

Obwohl ich bin immer noch nicht sicher, warum der Code wie folgt verhält, konnte ich mit der folgenden dieses Problem überwinden:

public static string GetProperty(string friendlyname, string property) 
{ 
    var user = GetUser(friendlyname); 
    try 
    { 
     return user.Properties[property].Value.ToString(); 
    } 
    catch (NullReferenceException ex) 
    { 
     throw "No property found"; 
    } 
} 

So kann ich, was Ausnahme, die ich von hier werfen verarbeiten kann und zeigen Sie an, dass die Erweiterungseigenschaft des Benutzers leer ist.