8 Stimmen

Abfrage aller Benutzer in einer OU innerhalb des Active Directory und Ausgabe der Benutzernamen im Listenfeld

Ich muss ein benutzerdefiniertes Attribut ändern, das wir dem Schema hinzugefügt haben, jedoch auf Basis aller Benutzer. Das Attribut ist ein MD5-Hash, den ich bereits als öffentliche Variable speichere. Ich versuche, eine Liste aller Benutzer in der angegebenen OU zu erstellen, die in der ListBox aufgeführt werden sollen, sodass Sie alle Benutzer oder einzelne Benutzer auswählen können, um die Werte anzuwenden.

Hier ist mein aktueller Code für Form1.cs

Verwenden von System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Security.Cryptography;
using System.DirectoryServices;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {

        String Password;

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }

        private void textBox1_TextChanged(object sender, EventArgs e)
        {
            Password = textBox1.Text;
        }

        private void button1_Click(object sender, EventArgs e)
        {

            System.Security.Cryptography.MD5CryptoServiceProvider x = new System.Security.Cryptography.MD5CryptoServiceProvider();
            byte[] bs = System.Text.Encoding.UTF8.GetBytes(Password);
            bs = x.ComputeHash(bs);
            System.Text.StringBuilder s = new System.Text.StringBuilder();
            foreach (byte b in bs)
            {
                s.Append(b.ToString("x2").ToLower());
            }
            Password = s.ToString();

            textBox2.Text = Password;

        }   

        private void button2_Click(object sender, EventArgs e)
        {

        }

        private void textBox2_TextChanged(object sender, EventArgs e)
        {

        }

        private void button3_Click(object sender, EventArgs e)
        {

        }

        private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
        {

        }
    }
}

0 Stimmen

Wie gehe ich vor, um alle Benutzer zu erhalten, nicht nur bestimmte, sondern alle und diese Informationen in ein Array oder etwas zu bekommen, das innerhalb des Listbox angezeigt werden kann

14voto

marc_s Punkte 701497

Wenn Sie .NET 3.5 oder neuer verwenden, können Sie einen PrincipalSearcher und ein "query-by-example" Principal verwenden, um Ihre Suche durchzuführen:

// Liste von Zeichenfolgen für Ihre Namen
List allUsers = new List();

// Erstellen Sie Ihren Domänenkontext und definieren Sie den OU-Container, in dem Sie suchen möchten
PrincipalContext ctx = new PrincipalContext(ContextType.Domain, "DOMAINNAME",
                                            "OU=SomeOU,dc=YourCompany,dc=com");

// Definieren Sie ein "query-by-example" Principal - hier suchen wir nach einem UserPrincipal (Benutzer)
UserPrincipal qbeUser = new UserPrincipal(ctx);

// Erstellen Sie Ihren Principal-Searcher, der den QBE-Principal enthält
PrincipalSearcher srch = new PrincipalSearcher(qbeUser);

// Finde alle Treffer
foreach (var found in srch.FindAll())
{
    // Machen Sie hier was auch immer Sie möchten - "found" ist vom Typ "Principal" - es könnte ein Benutzer, eine Gruppe, ein Computer usw. sein          
   allUsers.Add(found.DisplayName);
}

Wenn Sie es noch nicht getan haben - lesen Sie unbedingt den MSDN-Artikel Verwaltung von Verzeichnissicherheitsprinzipalen im .NET Framework 3.5, der schön zeigt, wie Sie die neuen Funktionen in System.DirectoryServices.AccountManagement optimal nutzen können

Sie können beliebige der Eigenschaften des UserPrincipal angeben und diese als "query-by-example" für Ihren PrincipalSearcher verwenden.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X