Управление Active Directory с помощью PowerShell
Введение
Нет никаких сомнений в том, что PowerShell останется инструментом автоматизации для Windows. Вместе с этим появляется множество способов автоматизации управления инфраструктурой Windows. Наверняка одной из наиболее важных областей, где автоматизация PowerShell может принести большую пользу, является управление Active Directory. AD поддается автоматизации — будь то возможность создать группу пользователей из списка текстовых файлов, или добавить пользователей в группы, или изменить «имя отдела» для набора пользователей — PowerShell предоставляет относительно простой способ сделать эти задачи быстро и легко. В этой статье я расскажу, как начать использовать PowerShell для управления AD, и приведу примеры некоторых распространенных задач, которые вы можете выполнять.
Что мне нужно?
Первое, что вам нужно для начала работы, — это «модуль» PowerShell, который предоставляет командлеты или функциональные блоки для управления AD. Разумеется, Microsoft предоставила модуль AD PowerShell, начиная с Windows Server 2008-R2 и Windows. Для использования этого модуля требуется, чтобы что-то, называемое службой Active Directory Web Services (ADWS), работало по крайней мере на одном контроллере домена в домене AD, которым вы планируете управлять. Если ваши контроллеры домена работают под управлением Server 2008-R2 или более поздней версии, то все готово — ADWS устанавливается на них по умолчанию. Если вы используете более раннюю версию Windows Server, например 2008 или 2003, в качестве контроллеров домена, вы можете установить автономную версию ADWS, чтобы использовать командлеты в этих средах. Загрузка доступна здесь.
Как только вы запустите ADWS хотя бы на одном контроллере домена, вы будете готовы получить и использовать модуль PowerShell AD. Для установки командлетов вам понадобится как минимум Windows 7 или Server 2008-R2. Если вы используете клиентскую операционную систему, такую как Windows 7, или версию Windows Server, отличную от DC, модуль AD входит в состав загружаемых средств удаленного администрирования сервера (RSAT), доступных в центре загрузки Microsoft. После установки инструментов RSAT перейдите в апплет «Панель управления», «Программы и компоненты», выберите «Включение или отключение компонентов Windows» и прокрутите вниз до раздела RSAT. В разделе «Средства администрирования ролей» разверните узел «Инструменты AD DS и AD LDS» и установите флажок «Модуль Active Directory для Windows PowerShell», как показано на рис. 1, а затем нажмите OK. Затем установка установит модуль AD.
Рисунок 1: Установка модуля AD из RSAT
Обратите внимание, что модуль AD уже установлен по умолчанию на контроллере домена Server 2008-R2 или более поздней версии, поэтому вам не нужно выполнять этот шаг, если вы работаете со своих контроллеров домена.
Наконец, я упомяну, что хотя модуль Microsoft AD и хорош, и о нем я расскажу в этой статье, он ни в коем случае не является единственным предложением в этой области. Задолго до того, как Microsoft выпустила свой модуль AD, Quest Software создала набор командлетов для управления AD из PowerShell. Этот набор командлетов отличается от набора Microsoft, но он также работает без ADWS и Windows 7 или более поздней версии в качестве предварительного условия. Вы можете скачать эти командлеты бесплатно здесь.
Использование командлетов
Первое, что вам нужно сделать, чтобы использовать командлеты, — это загрузить модуль AD в сеанс PowerShell. Есть по крайней мере несколько способов сделать это. Первый и наиболее очевидный — открыть группу программ в меню «Пуск» «Администрирование» и выбрать ярлык «Модуль Active Directory для Windows PowerShell», который запустит PowerShell и загрузит модуль. Кроме того, вы можете просто запустить PowerShell самостоятельно и ввести:
И получить тот же эффект. Теперь, как вы знаете, с чего начать? Вы можете получить список командлетов, доступных в модуле AD, набрав в PowerShell:
Когда вы введете эту команду в Server 2008-R2 или Windows 7, вы увидите список из 76 командлетов, которые предоставляют различные функции управления AD и AD LDS из PowerShell. Я также упомяну, что модуль AD поставляется с «PSProvider». PSProvider позволяет вам взаимодействовать с AD, как если бы это была буква диска. Таким образом, вы можете «перемещать каталоги» в свой домен AD, создавать «каталоги» OU и даже вносить изменения в объекты AD. Тем не менее, вероятно, существует меньше сценариев, в которых это имеет смысл, чем простое использование обычных командлетов, поэтому в этой статье я не буду рассматривать PSProvider. Итак, давайте погрузимся в некоторые примеры.
Создание нового пользователя
Самый простой пример — создание новой учетной записи пользователя. Допустим, мы хотим создать новую учетную запись пользователя в OU Marketing и установить несколько свойств для этой учетной записи при создании. Давайте посмотрим, как мы можем это сделать. Следующая команда PowerShell вызывает командлет New-ADUser для выполнения задания:
Эта команда выполняет большую работу. Давайте разберем его по каждому параметру и посмотрим, что происходит. Сначала мы вызываем New-ADUser и передаем параметр –Name, который указывает полное имя пользователя. Затем мы вызываем параметр –Enabled и передаем $true, указывая, что мы хотим создать учетную запись пользователя как включенную. Обратите внимание, что это будет работать только в том случае, если мы также установим пароль для пользователя, поскольку обычно AD не позволяет вам создавать включенную учетную запись пользователя без пароля, если домен требует пароль.
Далее мы устанавливаем SAMAccountName с помощью одноименного параметра. Следующие три параметра — GivenName, Surname и Displayname — задают имя, фамилию и отображаемое имя пользователя, как оно отображается в AD. Параметр Path предоставляет отличительное имя OU, в которое я хочу поместить эту учетную запись пользователя. Интересен параметр AccountPassword. Это позволяет мне назначить пароль пользователю, но то, что вы видите после этого, требует некоторого объяснения. Этот блок в скобках предложит пользователю ввести безопасный пароль после выполнения команды. Затем он передает этот безопасный пароль параметру и продолжает свой путь.
Следующий параметр, ChangePasswordAtLogon, переключает бит в учетной записи пользователя, требуя от нового пользователя изменить свой пароль при первом входе в систему. Параметры HomeDirectory и HomeDrive задают эти свойства для пользователя, а затем, наконец, параметр OtherAttributes позволяет мне заполнять атрибуты объекта, которые отображаются непосредственно через параметр командлета. В этом примере я заполняю хэш-таблицу PowerShell (@{}) парами ключ-значение, которые хочу изменить. В приведенном выше примере у меня есть единственный атрибут, называемый «комментарий», который я заполняю текстом, указывающим, что пользователь был создан из сценария PowerShell.
Участники группы
Как насчет того, чтобы быстро и легко узнать членов группы, включая все «рекурсивные» членства?
Нет проблем, вот команда, которая выполняет задание по поиску всех членов группы «Пользователи продаж»:
На рис. 2 показана разница между запуском этой команды без параметра Recursive и с ним.
Рисунок 2: Подсчет членства в группах
Обратите внимание, что в первом случае были найдены только 3 прямых члена, но во втором случае были перечислены все вложенные группы, и эти члены также были найдены.
Разное, что вы можете сделать
Имея 75+ командлетов, вы, очевидно, можете сделать с модулем AD намного больше, чем я указал выше. Хотите узнать информацию о вашем текущем лесу, включая функциональный уровень леса, владельцев ролей FSMO, все сайты в лесу? Просто введите:
И вы можете получить кучу информации о вашем лесу. Или хотите узнать, какова текущая политика паролей для вашего домена? Просто введите:
Что вернет текущую рабочую политику паролей (не детализированную политику паролей, а политику паролей на основе GPO) в домене.
Хотите разблокировать учетную запись пользователя, который заблокировал себя? Пытаться:
В этом примере я передаю samAccountName пользователя, которого я создал ранее, используя параметр Identity, и, предполагая, что у меня есть права в AD для этого, учетная запись пользователя разблокируется за считанные секунды — без суеты, без суеты!
Резюме
Я лишь поверхностно рассмотрел возможности модуля AD в PowerShell. Существует так много других командлетов и сценариев, которые вы можете автоматизировать, особенно когда вы начинаете принимать во внимание конвейер PowerShell и использовать его для передачи вывода одного командлета на вход другого. Многие сценарии автоматизации управления учетными записями AD начинают проявляться. Я надеюсь, что это дало вам отправную точку для изучения возможностей PowerShell и Active Directory!