Laden...

Active Directory Abfrage und Werte setzen

Erstellt von nknX vor 2 Jahren Letzter Beitrag vor 2 Jahren 542 Views
N
nknX Themenstarter:in
2 Beiträge seit 2022
vor 2 Jahren
Active Directory Abfrage und Werte setzen

Hallo,

ich möchte folgendes erreichen: Mithilfe einer Windows Forms (.NET 4.8) möchte ich nach einem User (mithilfe des SamAccountNamens) suchen.
In der Form möchte ich dann bestimmte label (1 - 10) mit den Werten aus dem AD-User Objekt angezeigt haben.
Also z.b. label1.text = givenName

Mein Projekt besteht aus Form1.cs, Program.cs und SAMsearch.cs, Entwicklungsumgebung ist Visual Studio 2022
Mein Form1.Designer.cs enthält eine TextBox, einen Button und ein label.

Den Ablauf stelle ich mir wie folgt vor: Ich gebe einen Text (bzw. SamAccountName) in die Textbox ein, drücke auf button1 und im label wird mir ein User-Property angezeigt. (Später dann auch mehrere)

Dazu brauche ich ja einen DirectorySearcher und einen DirectoryEntry.
Als nächstes habe ich eine Klasse erstellt die da heißt SAMsearch.cs mit folgendem Inhalt


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.DirectoryServices;
using System.DirectoryServices.AccountManagement;
using System.DirectoryServices.ActiveDirectory;

namespace WindowsFormsApp3
{
    public class SAMsearch
    {

        DirectoryEntry dEntry = new DirectoryEntry("LDAP://my.domain.com");
        DirectorySearcher directorySearcher = new DirectorySearcher(dEntry); // dEntry wird rot unterringelt wenn ich es in SAMsearch.cs verwende

        // SamAccountName des Users
        private string samAccountName;

        public string SamAccountName
        {
            get { return samAccountName; }
            set { samAccountName = value; }
        }

    }
}

Diese Klasse ruf eich dann mithilfe von diesem hier auf:


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;

namespace WindowsFormsApp3
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            
        }

        SAMsearch uSearch = new SAMsearch(); // die Klasse rufe ich hiermit auf. 

        private void button1_Click(object sender, EventArgs e)
        {
            uSearch.SamAccountName = textBox1.Text; // hier übergebe ich den SamAccountname an die neu erstellte Klasse uSearch
        }
    }
}

Mir ist jetzt nicht ganz klar wie ich die Werte dann wieder zurück bekomme und vor allem wie ich diese wieder zurück schreibe, d.h. ich möchte eine zweite TextBox in der ich z.b. "Vorname" eintrage und dann das alte Attribut überschrieben wird. Entweder hab ich einen totalen Denkfehler oder aber das was ich mir vorstelle geht nicht. Bin um jede Hilfe dankbar

16.835 Beiträge seit 2008
vor 2 Jahren

Du gehst OOP hier etwas falsch an.
Du sollest solche dynamischen Dinge über Methoden umsetzen, nicht über Eigenschaften.

Hier im Editor zusammen getippt:


public class AdSearcher
{
    private DirectoryEntry _directoryEntry;

    public AdSearcher(string ldapName)
    {
        _directoryEntry = new DirectoryEntry(ldapName);
    }

    public DirectorySearcher GetSearcher()
    {
        return  new DirectorySearcher(_directoryEntry);
    }

    public SearchResultCollection GetBySamAccountName(string samAccountName)
    {
        using(DirectorySearcher searcher = GetSearcher()) // kann auch sein, dass man erst nach der Verarbeitung vom ResultCollection disposen darf, musst mal in die Doku schauen
        {
           // hier searcher zusammen bauen
           searcher....

           // resultat laden
           SearchResultCollection result = search.FindAll();
           return result;
       }
    }
}

Du kannst nun in der Form eine Instanz von AdSearcher erzeugen.
Der GetBySamAccountName-Methode kannst Du dann den Wert aus der Textbox übergeben und das Resultat auswerten.

Werf am besten noch 1-2 Blick in die OOP Doku 😉

N
nknX Themenstarter:in
2 Beiträge seit 2022
vor 2 Jahren

ääääh okay ich lese mir das gleich mal durch..
wo finde ich denn die OOP Doku?
Bin gerade etwas verwirrt, meine Weltanschauung ist gerade erschüttert 😁
Und danke

16.835 Beiträge seit 2008
vor 2 Jahren

Generell die, die Dir am besten gefällt.
Vielleicht die von Microsoft? 😉https://docs.microsoft.com/en-us/dotnet/csharp/fundamentals/tutorials/oop
Die ist halt sehr einfach.