Wie kann ich die Abfrage von Active Directory mithilfe von C# und ADODB?
Suchen für ein Beispiel der Verbindung über ADODB zu Active Directory mithilfe von C#.
Mein Ziel ist es, in der Lage zu führen Sie eine Suche, um zu überprüfen, dass ein Benutzer gültig ist, die in Active Directory basierend auf einer,, dass die Benutzer-Attribute (Benutzer-id, E-Mail-Adresse, etc).
[Möchte betonen, dass die Verwendung von ADODB ist eine Voraussetzung dafür, mit DirectoryServices ist keine gültige Antwort.]
Mein Aktueller Ansatz funktioniert nicht (Ausnahme bei cmd.Execute-bit):
object parms = null;
object recs = null;
ADODB.Connection conn = new ADODB.Connection();
ADODB.Command cmd = new ADODB.Command();
ADODB.Recordset rs = new ADODB.Recordset();
conn.Open("Provider=ADsDSOObject",obfsUser,obfsPass,0);
cmd.ActiveConnection = conn;
cmd.CommandText = "<LDAP://OU=obfsOU,DC=obfsDC,DC=corp,DC=Net>;;name;subtree";
rs = cmd.Execute(out recs, ref parms, 0);
Ich bin mir nicht sicher, ob/wo ich bin, soll der server die Referenz und ich bin mir nicht wirklich sicher, was die Parameter übergeben, die in die cmd.Execute-Methode von ref sein sollte. Nicht eine Tonne von Dokumentation gibt es für die Verbindung zum ActiveDirectory von C# über ADODB.
conn.Staat ist wieder 1, also ich glaube, ich bin immer eine aktive Verbindung. Ich denke das problem ist, in der die Parameter übergeben, um den Befehl cmd ein.Execute () - Methode.
InformationsquelleAutor ScottCher | 2009-07-16
Du musst angemeldet sein, um einen Kommentar abzugeben.
Antwort ScottCher funktioniert, aber es hat Einschränkungen, insbesondere dass Sie kein Angebot mit den 1000 Rekordergebnis begrenzen. Zu tun, die nur Weg ist, um ein Command-Objekt, und glaubt mir, das ist ein Minenfeld, da es (a) keine gute Dokumentation auf der C# - Schnittstellen und (b) es ist unglaublich keine vollständige Lösung, kann "Gegoogelt" werden, als dies geschrieben.
Ich habe in den letzten paar Tagen auf diese, und etwas arbeiten, ich möchte zurück zu geben, um alle Quellen, die ich gelesen habe, mit verschiedenen bits und Stücke, um das puzzle.
Ersten, wie erwähnt, in eine Tonne von Orten (leider mit VB nur Beispiele!), wenn Sie nicht etwas besonderes tun, dann alle ADSI-Abfragen sind limitiert auf 1000 Zeilen der Ergebnisse. Der Schlüssel zur Vermeidung dieser, ist der "Page Size" - Eigenschaft des Command-Objekts. Dazu kommen wir in einer Sekunde, aber zuerst müssen wir die grundlegende Abfrage arbeiten mit einem Befehl. Wenn Sie das original-code in diesem thread, erhalten Sie eine Ausnahme auf cmd.Ausführen beschweren sich über nicht übereinstimmende Parameter. Sie würden denken, dass man in null-wie das ref-Objekt würde ausreichen, vor allem, da der LDAP-syntax nicht (scheinbar) die Parameter haben.
Fand ich die Antwort auf diese zwei Orte. Erstens, obwohl Sie nicht explizit angeben, die Parameter, es würde scheinen, dass der ":" in der LDAP-SQL-syntax ist genug, um ADO denke, die Parameter sind erforderlich. Seltsam, aber anscheinend wahr. Zweitens, die RICHTIGE Methode zu geben, die "keine Parameter" - Fall ist, um den Wert zu Geben.Fehlende, nicht null, wie in:
object parms = Type.Missing;
War dies der Schlüssel zum Erfolg Ausführen, um nicht eine exception werfen.
Nun mit einem Befehl arbeiten, können wir jetzt die Adresse der 1000-Zeilen-Grenze. Dies ist "einfach", indem Sie die "Page Size" - Eigenschaft auf den Befehl aber, als es offensichtlich aus der C# - Schnittstelle, es ist nicht das gleiche wie ein C# - Eigenschaft. Sie brauchen, um Sie in die Properties-Auflistung, aber dies bedeutet nicht, setzen Sie eine schöne Sammlung, die Schnittstelle zu tun, die mit. Nach einiger Versuch und Irrtum, die richtige syntax lautet:
cmd.Properties["Page Size"].Value = 500;
Ich glaube nicht, dass es wichtig ist genau das, was die Größe der Seite (spielt immer noch mit, dass), aber wenn er auf etwas, das ist genug, um zu sagen, ADSI, um alle Ergebnisse erhalten. Und ich hoffe, das hilft jemandem.
InformationsquelleAutor tomo
Dieser funktioniert.
Hoffe, dies hilft jemand anderes mit der gleichen Notwendigkeit und Probleme, die ich hatte.
[Hinweis: der Mangel an ein ADODB.Command-Objekts und die Verwendung von SQL-format für die Abfrage anstelle von ADSI-format.]
Ur - froh, dass es geholfen hat.
InformationsquelleAutor ScottCher
Check-out Richard Mueller web site, die auf Active Directory - er eigens eine Seite über ADO-Suche Tipps für AD:
http://www.rlmueller.net/ADOSearchTips.htm
Gibt es auch eine ganze Reihe von hervorragenden Referenz-material auf seiner web-site, wie Excel-sheets, mit allen AD-Eigenschaften und Ihre Merkmale.
Sehr zu empfehlen!
Marc
InformationsquelleAutor marc_s