запросить всех пользователей в подразделении в Active Directory и вывести имена пользователей в список - PullRequest
7 голосов
/ 19 июля 2011

Мне нужно изменить пользовательский атрибут, который мы добавили в схему, но для всех пользователей.Атрибут является хешем MD5, который я уже храню как открытую переменную.Я пытаюсь получить список всех пользователей в указанном подразделении, который будет отображаться в списке, чтобы вы могли выбрать всех пользователей или отдельных пользователей, к которым будут применяться значения.

Вот мой текущий код дляForm1.cs

using 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)
        {

        }
    }
}

1 Ответ

11 голосов
/ 19 июля 2011

Если вы используете .NET 3.5 или новее, вы можете использовать PrincipalSearcher и принцип «запрос за примером» для поиска:

// List of strings for your names
List<string> allUsers = new List<string>();

// create your domain context and define the OU container to search in
PrincipalContext ctx = new PrincipalContext(ContextType.Domain, "DOMAINNAME", 
                                            "OU=SomeOU,dc=YourCompany,dc=com");

// define a "query-by-example" principal - here, we search for a UserPrincipal (user)
UserPrincipal qbeUser = new UserPrincipal(ctx);

// create your principal searcher passing in the QBE principal    
PrincipalSearcher srch = new PrincipalSearcher(qbeUser);

// find all matches
foreach(var found in srch.FindAll())
{
    // do whatever here - "found" is of type "Principal" - it could be user, group, computer.....          
   allUsers.Add(found.DisplayName);
}

Если вы этого не сделалиуже - абсолютно прочитайте статью MSDN Управление принципами безопасности каталогов в .NET Framework 3.5 , которая показывает, как наилучшим образом использовать новые функции в System.DirectoryServices.AccountManagement

. Вы можете указать любойсвойств UserPrincipal и используйте их как «запрос по примеру» для вашего PrincipalSearcher.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...