В нескольких предыдущих статьях мы познакомились с первой (и самой сложной) категорией «однострочных» команд PowerShell для Active Directory (AD), а именно, командами-запросами. Как уже говорилось ранее, реальную силу PowerShell в деле управления AD можно почувствовать, если объединить запрос, позволяющий вывести список учетных записей, отвечающих некоторому критерию (например, пользователей, не регистрировавшихся в системе на протяжении 120 дней; сотрудников определенного подразделения; подчиненных конкретного руководителя и т.д.), с командой, выполняющей с этими учетными записями определенное действие (отключение, предписание сменить пароль при следующем входе в систему, смену руководителя и т.д.). О таких «дуэтах PowerShell для управления AD» мы будем говорить как о комбинациях команды-фильтра и команды-действия.

Применительно к задаче вывода учетных записей, попадающих в определенную категорию, мы исследовали возможности get-aduser (может все, но имеет сложный синтаксис), search-adaccount (поиск ограничен, но широкие возможности настройки и простой синтаксис) и get-adgroupmember (позволяет выводить список членов группы). Теперь пришло время перейти к действиям и познакомиться с новой категорией команд.

Рассмотрим первую команду-действие: disable-adaccount. Эта команда должна включать отличительное имя, идентификатор GUID или SID, либо значение SamAccountName. Например, команда отключения учетной записи с именем IvanVasilyevich4 будет иметь следующий вид:

disable-account -identity IvanVasilyevich4

Команда имеет уже знакомую нам структуру, то есть состоит из глагола и существительного. Кстати, disable-account воспринимает -identity как позиционный параметр первой позиции. Это означает, что для получения аналогичного результата достаточно такого варианта команды:

disable-account IvanVasilyevich4

Однако и в укороченном виде ввод disable-account может оказаться утомительным, даже при использовании функции заполнения нажатием клавиши Tab в PowerShell. Возможно, вы избежите туннельного синдрома запястья, если воспользуетесь функцией заполнения нажатием Tab, находясь в System32 – текущей папке для PowerShell при запуске с правами администратора. Укоротить запись можно и с помощью set-alias:

set-alias disable-adaccount dacc

Это позволит в дальнейшем пользоваться таким вариантом:

dacc IvanVasilyevich4

Однако при этом вам придется поместить команду set-alias в свой профиль, и вводимые команды будут непонятны окружающим. Поймите меня правильно: нет ничего плохого в одноразовом администрировании AD с помощью PowerShell, особенно если вы быстро печатаете, умело пользуетесь клавишей табуляции и держите окно командной строки PowerShell постоянно открытым. Но повторю, что реальная сила таится не в «сольных выступлениях» PowerShell, а в дуэтах, например в таком:

search-adaccount -usersonly -accountinactive -timespan «120» | disable-adaccount

Запись выглядит громоздкой, но если разобрать ее по частям, то все упрощается. Посмотрим на левую часть:

search-adaccount -usersonly -accountinactive -timespan «120»

Многим эта команда должна быть знакома. Это запрос, позволяющий вывести список учетных записей, владельцы которых не были зарегистрированы в системе на протяжении 120 дней. Пока мы только узнавали о таких неактивных пользователях, но ничего не делали с этой информацией, лишь принимали ее к сведению.

Далее следует символ контейнера (|). Тот, кому случалось иметь дело с командными файлами DOS, либо заниматься администрированием из командной строки UNIX, сразу его узнает. Этот символ означает подачу выхода одной команды (списка пользователей, не входивших в систему в течение четырех месяцев) на вход другой команды (в данном случае, команды отключения учетных записей):

disable-adaccount

Таким образом, эта пара команд позволяет найти неактивных пользователей и отключить их учетные записи.

Думаю, что этот пример – достойное воздаяние за время, потраченное на все наши изыскания, касающиеся PowerShell. Сделать то же самое из окна графического пользовательского интерфейса было бы гораздо сложнее (пришлось бы создать запрос LDAP, запустить его, затем с помощью Ctrl + A выбрать результаты и т.д.) Конечно, запись несколько длинна, но можно воспользоваться маленькими желтыми заметками в Outlook для хранения полезных однострочных команд PowerShell, как это делаю я, либо одним из новых «фрагментов» в PowerShell 3.0. Загрузите Windows Management Framework 3,0 (требуется версия NET 4.0), и вы получите PowerShell 3.0. Настоятельно рекомендую. Еще лучше, что можно упаковать эту команду в файл. ps1, как было показано ранее, и создать задачу, которая запускается автоматически, скажем, каждую неделю. Наше знакомство с однострочными командами только началось. Продолжим его в следующем месяце.