Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Tician

Frischling

  • »Tician« ist der Autor dieses Themas

Beiträge: 32

Wohnort: Bad Friedrichshall

Beruf: FISI

  • Private Nachricht senden

1

02.02.2016, 10:20

C#, Active Directory, Variablen/Wildcard Problem

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

Tician

Frischling

  • »Tician« ist der Autor dieses Themas

Beiträge: 32

Wohnort: Bad Friedrichshall

Beruf: FISI

  • Private Nachricht senden

2

04.02.2016, 08:01

Ohje... entweder es will sich keiner damit beschäftigen (was ich verstehen kann) oder es kennt sich keiner damit aus oder ich bin einfach im falschen Forum und habe das "nicht nur um SPiele zu programmieren" missverstanden. Oder mein Problem ist so banal das alle nur den Kopf schütteln.

Was trifft denn zu? ?(

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

3

04.02.2016, 08:51

Habe ich so noch nie gebraucht. Wenn du aber nach "DirectorySearcher + filter + wildcard" bei Google suchst dann gibt es einige Ergebnisse. Hast du dich da schon mal durch gesucht und falls ja, was hat denn geholfen, bzw nicht geholfen? Gibt es spezielle Fehler die auftauchen oder gibt es einfach kein Ergebnis zurück?
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

4

04.02.2016, 09:49

Einer der größten Vorteile von C# ist die excellente MSDN Hilfe:

Bei der Suche nach MSDN DirectorySearcher bin ich auf die Klasse gestoßen, und der Filter-Eigenschaft ist dieser Link hinterlegt:

Filter

Der * Operator ist wohl nicht erlaubt. Vielleicht kannst du ja alle auslesen und dann noch einmal über das Ergebnis iterieren...
Empires in Space
MMO 4X, Rundenbasiert
HTML5/TypeScript/Javascript/CSS/C#/SQL

Werbeanzeige