Домой User Добавление пользователя в группу на удаленном ПЭВМ: Справочник по C#

Добавление пользователя в группу на удаленном ПЭВМ: Справочник по C#

645
0


      Данная статья содержит пошаговую инструкцию, для создания проекта по добавлению пользователя на удаленном компьютере в определенную группу. При реализации тестового проекта будет задействован класс «DirectoryEntry» из пространства имён «System.DirectoryServices», библиотеки «System.DirectoryServices.dll».
Откройте Microsoft Visual Studio и создайте новый проект.

Добавьте на главную форму вашего проекта следующие элементы управления:

  • textBox1 — Поле для ввода имени пользователя, используемого при проверке подлинности клиента;
  • textBox2 — Поле для ввода пароля, используемого при проверке подлинности клиента;
  • textBox3 — DNS или IP адрес ПЭВМ в группу которого будет добавлен пользователь;
  • textBox4 — Учетная запись пользователя, которая будет добавлена в указанную группу;
  • textBox5 — Домен учетной записи или DNS имя ПЭВМ, где расположен учетная запись;
  • textBox6 — Группа в которую будет добавлен пользователь;
  • button1 – Кнопка запуска процесса добавления пользователя в группу.

У вас получится приведенный ниже пример.

      Сделайте двойной клик левой клавишей мыши по элементу управления «button1», вы перейдете в автоматически созданный метод «button1_Click», события «Click», возникающего при нажатии левой клавишей мыши по данному элементу управления.
Основным средством работы как с «Active Directory», так и с локальным/удаленным компьютером является объект «System.DirectoryServices», хранящийся в «System.DirectoryServices.dll». Поэтому перед тем как начать работать, добавьте библиотеку «System.DirectoryServices.dll» в «References» вашего проекта. И подключите пространство имён «System.DirectoryServices», используя директиву «using». В пространство имён «System.DirectoryServices» включены два основных компонента класса: «DirectoryEntry» и «DirectorySearcher», которые используют технологию ADSI(Active Directory Services Interfaces). Эти классы могут быть использованы с любым из сервис провайдеров Active Directory, такими как Lightweight Directory Access Protocol (LDAP), Internet Information Services (IIS), Novell NetWare Directory Service (NDS), и WinNT. Для добавления пользователя в группу на удаленном компьютере необходимо воспользоваться классом «DirectoryEntry». При инициализации нового экземпляра данного класса, необходимо указать путь для данного объекта «DirectoryEntry».
      Синтаксис свойства «Path» варьируется в зависимости от поставщика. Ниже описываются наиболее типичные сценарии применения:

1)«WinNT»

  • Подключение к компьютеру. Например: «WinNT://<имя_компьютера>/computer «. 
  • Подключение к группе на компьютере. Например: «WinNT://<имя_домена>/<имя_компьютера>/<имя_группы>». Если подключение производится к локальному компьютеру, следует ввести: «WinNT://<имя_компьютера>/<имя_группы>».
  • Подключение к пользователю на компьютере. Например: «WinNT://<имя_домена>/<имя_компьютера>/<имя_пользователя>». Если подключение производится к локальному компьютеру, следует ввести: «WinNT://<имя_компьютера>/<имя_пользователя>».
  • Подключение к службам на компьютере. Например: «WinNT://<имя_домена>/<имя_компьютера>/<имя_службы>». Если подключение производится к локальному компьютеру, следует ввести: «WinNT://<имя_компьютера>/<имя_службы>».
  • Обнаружение всех доменов в сети. Например: «WinNT:». Домены могут быть найдены путем перечисления дочерних элементов данного элемента.

2)«LDAP»

  • Подключение к группе в домене. Например: «LDAP://CN=<имя_группы>, CN =<Пользователи>, DC=<компонент_домена>, DC=<компонент_домена>,…».
  • Подключение к пользователю в домене. Например: «LDAP://CN=<полное_имя_пользователя>, CN =<Пользователи>, DC=<компонент_домена>, DC=<компонент_домена>,…».
  • Подключение к компьютерам в домене. Например: «LDAP://CN=<имя_компьютера>, CN =<Компьютеры>, DC=<компонент_домена>, DC=<компонент_домена>,…».

3)«IIS»

  • Подключение к веб-каталогу. Например: «IIS://LocalHost/W3SVC/1/ROOT/<имя_веб-каталога>».

      В соответствии с приведенным описанием синтаксиса свойства «Path», формируем подключение к удаленному компьютеру с указанием DNS имени, а так же формируем две переменные содержащие пути к группе в которую будет добавлен пользователь и пути к расположению учетной записи.

//Путь к группе в которую
//будет добавлен пользователь.
string groupPath =
string.Format("WinNT://{0}/{1},group", textBox3.Text, textBox6.Text);

//Путь к учетной записи пользователя.
string userPath =
string.Format("WinNT://{0}/{1},user", textBox5.Text, textBox4.Text);

//Инициализируем новый экземпляр класса
//System.DirectoryServices.DirectoryEntry,
//который привязывает этот экземпляр к узлу
//доменных служб Active Directory,
//расположенному по указанному пути.
//В качестве параметра указывается путь
//по которому требуется привязать
//System.DirectoryServices.DirectoryEntry.(System.String)
//к каталогу.
DirectoryEntry AD =
new DirectoryEntry(String.Format("WinNT://{0},computer", textBox3.Text));

Для аутентификации на удаленном компьютере необходимо свойствам «Username» и «Password», указать учетные данные.

//Задаем имя пользователя, используемое
//при проверке подлинности клиента.
AD.Username = textBox1.Text;

//Задаем пароль, используемый
//при проверке подлинности клиента.
AD.Password = textBox2.Text;
Для безопасной зашифрованной аутентификации можно также определить тип аутентификации. Аутентификация может задаваться с помощью свойства AuthenticationType класса Directory Entry. При этом присваиваемое значение является одним из перечислений AuthenticationTypes.

      После успешной аутентификации на удаленном компьютере необходимо выполнить поиск группы, в которую будет добавлен пользователь.

//Получаем Объект System.DirectoryServices.DirectoryEntry,
//представляющий найденный дочерний объект.
DirectoryEntry grp =
AD.Children.Find(textBox6.Text, "group");

//Выполняем проверку, найдена ли группа
//на удаленном компьютере.
if (grp != null) {}

Если группа не найдена, то выводим сообщение об отрицательном результате.

else
{
//Выводим сообщение, что группа в которую необходимо
//добавить пользователя, не найдена.
MessageBox.Show(String.Format("Группа «{0}» не найдена!", textBox6.Text));
} 

      В случае если группа найдена, выполняем метод «DirectoryEntry.Invoke», данный метод добавляет пользователя в указанную группу. В первом параметре метода «Invoke», указывается имя метода – «Add», который должен быть вызван в объекте. Вторым параметром указывается путь к учетной записи пользователя которого необходимо добавить, с последующим сохранением внесенных изменений в элемент каталога в базовом хранилище каталогов.

var root = new DirectoryEntry(groupPath);
root.Invoke("Add", new object[] { userPath });

//Сохраняем изменения, внесенные в элемент
//каталога в базовом хранилище каталогов.
root.CommitChanges();

      Полный листинг добавления пользователя в указанную группу приведен ниже, добавьте его в тело метода «button1_Click».

try
{
//Путь к группе в которую
//будет добавлен пользователь.
string groupPath =
string.Format("WinNT://{0}/{1},group", textBox3.Text, textBox6.Text);

//Путь к учетной записи пользователя.
string userPath =
string.Format("WinNT://{0}/{1},user", textBox5.Text, textBox4.Text);

//Инициализируем новый экземпляр класса
//System.DirectoryServices.DirectoryEntry,
//который привязывает этот экземпляр к узлу
//доменных служб Active Directory,
//расположенному по указанному пути.
//В качестве параметра указывается путь
//по которому требуется привязать
//System.DirectoryServices.DirectoryEntry.(System.String)
//к каталогу.
DirectoryEntry AD =
new DirectoryEntry(String.Format("WinNT://{0},computer", textBox3.Text));

//Задаем имя пользователя, используемое
//при проверке подлинности клиента.
AD.Username = textBox1.Text;

//Задаем пароль, используемый
//при проверке подлинности клиента.
AD.Password = textBox2.Text;

//Получаем Объект System.DirectoryServices.DirectoryEntry,
//представляющий найденный дочерний объект.
DirectoryEntry grp =
AD.Children.Find(textBox6.Text, "group");

//Выполняем проверку, найдена ли группа
//на удаленном компьютере.
if (grp != null)
{
var root = new DirectoryEntry(groupPath);
root.Invoke("Add", new object[] { userPath });

//Сохраняем изменения, внесенные в элемент
//каталога в базовом хранилище каталогов.
root.CommitChanges();

//Выводим сообщение об успешном
//добавлении пользователя в группу
MessageBox.Show(
String.Format(
"Пользователь {0} успешно добавлен в группу "+ "«"+textBox6.Text+"»!",
textBox4.Text),
"Добавление пользователя",
MessageBoxButtons.OK,
MessageBoxIcon.Information);
}
else
{
//Выводим сообщение, что группа в которую необходимо
//добавить пользователя, не найдена.
MessageBox.Show(String.Format("Группа «{0}» не найдена!", textBox6.Text));
}
}
catch (Exception ex)
{
//Выводим сообщение, что в процессе
//добавления пользователя в группу,
//возникла ошибка.
MessageBox.Show(ex.ToString(),
"Добавление пользователя",
MessageBoxButtons.OK,
MessageBoxIcon.Warning);
}

      Запустите ваш проект, нажав на клавиатуре клавишу «F5», заполните все поля и нажмите кнопку «Добавить». В случае успешного добавления пользователя вы увидите соответствующее сообщение. Если пользователь уже присутствует в данной группе, у вас появится сообщение с исключением «Указанная учетная запись уже входит в эту группу».

Ссылка для скачивания примера: Rusfolder.net

ЧИТАТЬ ТАКЖЕ:  Ввод в Textbox только цифр: Справочник по C#

Добавление пользователя в группу на удаленном ПЭВМ: Справочник по C#

0.00 (0%) 0 votes

ОСТАВЬТЕ ОТВЕТ

Пожалуйста, введите ваш комментарий!
пожалуйста, введите ваше имя здесь