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
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 😉
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
ääää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
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.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code