Hallöööchen mit 3 öchen,
ich hab ja gelesen es muss nicht unbedingt um Spiele gehen, deshalb wende ich mich mal Hilfesuchend an die Programmierprofis und Informatiker hier.
Mein Vorhaben: Ein Programm zu schreiben das den Benutzernamen des aktuell an der Domäne (Windows) angemeldeten Benutzers ausließt, in der Active Directory die untergeordneten Benutzer findet (hier kommt das Problem), diese in einer ListBox anzeigt und es dem Benutzer ermöglicht diese zu entsperren.
Fakten:
Ich benutze im Active Directory die Attribute von jedem Benutzer. Sieht in grafischer Oberfläche so aus:
http://www.boostsolutions.com/blog/wp-co…ectory-Pic2.png
Es gibt leider kein Attribut von übergeordneten Benutzern in dem Untergeordnete Benutzer aufgelistet werden.
Es gibt allerdings ein Attribut (der untergeordneten Benutzer) das sich "manager" nennt in dem der übergeordnete Benutzer (und noch einiges mehr) eingetragen ist.
Hier mal mein Code:
|
C#-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
|
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; //Domäne + Nachname
string username = System.IO.Path.GetFileNameWithoutExtension(usernamead); //nur Nachname
textBox1.Text = username;
string password = textBox2.Text;
DirectoryEntry dir = new DirectoryEntry("LDAP://xxx.xxx.xxx.xx"); //Zugang zum AD-Server über IP, IP ist zensiert
DirectorySearcher search = new DirectorySearcher(dir); //Ich starte eine Suche, die ich "search" nenne und sage wo gesucht wird (dir)
//search.Filter = "(objectClass=user)"; //<-- funktioniert! - Listet mir aber ALLE Benutzer auf, war nur zum Test
//search.Filter = "(manager=CN=Max Mustermann,OU=Benutzer,OU=Debitorenbuchhaltung,OU=Kaufmännischer Service,OU=Abteilungen,DC=xxx-xx,DC=INT)"; // <- funktioniert auch! - Ist aber zu spezifisch und nur auf einen Benutzer ausgerichtet, ich möchte aber meine Variable "username" Benutzen
//search.Filter = "(manager=CN=Max*,OU=Benutzer,OU=Debitorenbuchhaltung,OU=Kaufmännischer Service,OU=Abteilungen,DC=xxx-xx,DC=INT)"; //hier ein Test indem ich den Vornamen noch manuell suche, aber mit WildCard - funktioniert nicht mehr
search.Filter = "(manager=CN=*" + username + "*") //so in etwa soll es aussehen, funktioniert aber auch nicht.
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...
{
listBox1.Items.Add(result.GetDirectoryEntry().Properties["cn"].Value.ToString()); //CN ist das Attribut mit dem Namen des Benutzers
}
}
}
private void button2_Click(object sender, EventArgs e)
{
string listuser = Convert.ToString(listBox1.SelectedIndex); //entsperren des ausgewählten Benutzers
try
{
DirectoryEntry user = new DirectoryEntry(listuser);
user.Properties["LockOutTime"].Value = 0;
user.CommitChanges();
user.Close();
}
catch (System.DirectoryServices.DirectoryServicesCOMException)
{
MessageBox.Show("Error");
}
}
}
}
|
Da ich selbst noch Laie bin, habe ich alles kommentiert um es zu verstehen. Weiß einer was ich falsch mache, warum meine Suche mit WildCard oder Variable nicht mehr funktioniert (keine Ergebnisse liefert)?
Grüße
Tician