Fragensteller
Active Directory search.Filter mit Variable

Allgemeine Diskussion
-
Guten Tag liebes Forum,
Ich habe meine Ausbildung zur Fachinformatikerin erst im September angefangen und beschäftige mich mit C#. Meine Aufgabe ist ein Programm zu schreiben das den angemeldeten Benutzer ausließt und in der AD die untergerodneten Benutzer (die im manager-Attribut den angemeldeten Benutzer stehen haben) sucht und in einer listBox anzeigt. Jetzt gibt es natürich tolle Beispiele wie man die search.Filter Funktion benutzen kann, aber keines der Beispiele beinhaltet den Gebrauch von einer Variable - und da scheitert es bei mir.
search.Filter = "(manager=CN=Name Nachname,OU=Benutzer,OU=Debitorenbuchhaltung,OU=Kaufmännischer Service,OU=Abteilungen,DC=XXX-XX,DC=XXX)"; // <- funktioniert!
Mit dieser Zeile würde das Programm funktionieren, so sehen Attribut und Wert aus.
search.Filter = "(manager=*"+username+"*)"; //funktioniert nicht
So sieht meine Zeile aus, wobei 'username' eine variable ist die nur den Nachnamen des momentan angemeldeten Benutzers enthält. Was muss ich tun damit mein Programm in dem ganzen Wert der im Manager-Attribut steht nur nach dem username sucht und dabei den Rest ignoriert?
Ich hoffe ihr könnt mir helfen und entschuldige mich für meine (noch) Unwissenheit.
Grüße
Tician
- Typ geändert Aleksander Chalabashiev Freitag, 6. November 2015 08:35 keine bestätigte Lösung
Alle Antworten
-
Hallo Tician90,
Sieh Dir folgende Artikel an:
http://www.codeproject.com/Articles/18102/Howto-Almost-Everything-In-Active-Directory-via-C
Dort findest Du viele Beispiele. Hier gibt es auch interessante Informationen.
Gruß
Aleksander
Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „IT-Pros helfen IT-Pros“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.
-
Hi Aleksander,
danke für die Hilfe, ich habe mir beide Links angesehen und es sind auch Beispiele mit Variablen dabei, aber weiterhelfen tut mir das leider doch nicht, da in dem Attribut "manager" nicht nur der Name steht sondern weitaus mehr (siehe oben) bräuchte ich auch noch das Sternchen (*) irgendwie als Zeichen dafür das ich nur nach dem Namen suche, egal was davor und dahinter steht.
Aber egal wo ich die * hinsetze ich kriege entweder Fehler oder es funktioniert nicht, ich schätze mal weil das * nicht so wie ich will als Zeichen das da noch Etwas davor und danach kommt gesehen wird, sondern als Multiplikations-Zeichen?
Hier nochmal der gesamte Code:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.DirectoryServices; using System.DirectoryServices.ActiveDirectory; using System.DirectoryServices.AccountManagement; namespace ActiveDirectoryBla { public partial class Form1 : Form { public Form1() { InitializeComponent(); textBox1.Enabled = false; textBox2.PasswordChar = '#'; } private void textBox1_TextChanged(object sender, EventArgs e) { } private void listBox1_SelectedIndexChanged(object sender, EventArgs e) { } private void button3_Click(object sender, EventArgs e) { string usernamead = System.Security.Principal.WindowsIdentity.GetCurrent().Name; string username = System.IO.Path.GetFileNameWithoutExtension(usernamead); textBox1.Text = username; string password = textBox2.Text; DirectoryEntry dir = new DirectoryEntry("LDAP://xx.xx.xx.xx"); DirectorySearcher search = new DirectorySearcher(dir); search.Filter = "(manager=*"+username+"*)"; //funktioniert nicht //search.Filter = "(objectClass=user)"; //<-- funktioniert! //search.Filter = "(manager=Hand Paul,OU=Benutzer,OU=Debitorenbuchhaltung,OU=Kaufmännischer Service,OU=Abteilungen,DC=xxxx,DC=xxx)"; // <- funktioniert! SearchResultCollection searchresult = search.FindAll(); //Hier in "searchresult" kommt alles rein was meine Suche findet if (searchresult != null) //wenn meine Suche nicht Ergebnislos ist dann... { foreach (SearchResult result in searchresult) //Für jedes Ergebnis... { /*var tmpResult = result; var tmpDirEntry = result.GetDirectoryEntry(); var tmpProperties = tmpDirEntry.Properties; var tmpPropSN = tmpProperties["sn"]; var tmpValue = tmpPropSN.Value;*/ listBox1.Items.Add(result.GetDirectoryEntry().Properties["cn"].Value.ToString()); } } } private void button2_Click(object sender, EventArgs e) { string listuser = Convert.ToString(listBox1.SelectedIndex); try { DirectoryEntry user = new DirectoryEntry(listuser); user.Properties["LockOutTime"].Value = 0; user.CommitChanges(); user.Close(); } catch (System.DirectoryServices.DirectoryServicesCOMException) { MessageBox.Show("Error"); } } } }
Ich bin noch Programmier-Anfängerin und einige Dinge waren anfänglich schwierig zum Laufen zu bringen, deshalb ist alles Kommentiert - nicht wundern :)
Gruß
Tician