In der Tat müssen Sie eine bitweise Operation durchführen, um das richtige Bit auf den entsprechenden Wert zu setzen. In dem unten stehenden Link werden Sie auf die User Account Control Flags stoßen. Sie müssen also nur die entsprechende logische Operation mit der Eigenschaft durchführen, um das Konto entweder zu sperren oder zu entsperren.
Der folgende Link wird Sie sicher interessieren.
Wie man (fast) alles in AD
Ich werde zu einem späteren Zeitpunkt einen C#-Beispielcode hinzufügen.
Hier ist der vorgeschlagene Code:
public class AdUser {
private int _userAccountControl
public bool IsLocked {
get {
return _userAccountControl & UserAccountControls.Lock
} set {
if(value)
_userAccountControl = _userAccountControl | UserAccountControls.Lock
else
// Must reverse all the bits in the filter when performing an And operation
_userAccountControl = _userAccountControl & ~UserAccountControls.Lock
}
}
public enum UserAccountControls {
Lock = 0x10
}
}
Bitte bedenken Sie, dass Sie vielleicht einige Änderungen an diesem Code vornehmen müssen, da ich ihn nicht getestet habe. Aber Ihr Code sollte so oder so ähnlich sein wie der zum Sperren und Entsperren des Benutzerkontos. Früher oder später werden Sie die DirectoryEntry.Properties[] verwenden müssen, um sie auf den Wert in Ihrer Objektklasse zu setzen.
EDIT
Wie sperrt man am besten ein Active Directory-Konto?
int val = (int)directoryentry.Properties["userAccountControl"].Value;
directoryentry.Properties["userAccountControl"].Value = val | 0x0010;
vs.
directoryentry.InvokeSet("IsAccountLocked", true);
Als Antwort auf Ihre Frage, die ich in meinem Edit gestellt habe, würde ich sagen, dass dies der einfachste Weg ist, zumindest den ich kenne. Ich bevorzuge es, soweit es mich betrifft, diese Funktionen so zu verpacken, wie ich es ungefähr in meinem Codebeispiel getan habe, so dass sich die anderen Programmierer nicht um die bitweisen Operationen usw. kümmern müssen. Für sie sind es Objekte, die sie manipulieren.
Welcher der beiden Wege der beste ist, ist wohl vor allem eine Frage der Vorliebe. Wenn Sie mit logischen Operationen vertraut sind, sind diese normalerweise vorzuziehen. Im Vergleich dazu ist die zweite Option jedoch einfacher zu handhaben.
1 Stimmen
+1 Ich habe die Methode DirectoryEntry.InvokeSet() gelernt. Danke! =)