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();
}