Марк Минаси (www.minasi.com/gethelp) – старший редактор журнала Windows IT Pro, сертифицированный системный инженер по продуктам Microsoft

В статье «Поиск и управление группами AD», опубликованной в Windows IT Pro/RE № 7 за 2012 год, я рассматривал команды PowerShell, предназначенные для управления группами AD: new-adgroup для создания групп, add-adgroupmember для добавления учетных записей в группу и get-adgroupmember для вывода учетных записей, принадлежащих данной группе. На этот раз речь пойдет о других возможностях команды get-adgroupmember, а в заключение я покажу, как извлечь полезные сведения для повышения эффективности работы из текста интерактивной справки PowerShell.

Вначале расширим наши возможности управления группами, применив знания, полученные из предыдущих публикаций, посвященных PowerShell. Зная, что можно создать новую группу с помощью команды new-adgroup, логично предположить, что для удаления группы можно воспользоваться командой remove-adgroup:

remove-adgroup folks

Напомним, что в синтаксисе команд PowerShell вместо create- (создать) или delete- (удалить) обычно применяются new- или remove-. В ответ на ввод указанной выше команды PowerShell выдает запрос на подтверждение удаления группы, и это правильно, поскольку восстановление удаленных объектов AD проблематично, если не включена корзина AD. Однако опытные пользователи могут отключить выдачу этого запроса с помощью параметра –confirm:$false:

remove-adgroup folks -confirm:$false

Сказанное заставляет сделать предположение о существовании команды remove-adgroupmember, если имеется add-adgroupmember. Это в очередной раз подтверждает целесообразность дальнейшего изучения возможностей PowerShell: вначале команды кажутся сложными и даже нелогичными, но когда начинаешь постигать логику этого инструментария, все оказывается намного проще.

Вспомним о необычной особенности add-adgroupmember. Ранее в качестве примера мы рассматривали следующую команду:

add-adgroupmember folks user2,user3

Странность заключается в том, что обычно в PowerShell используются параметры с именами, как в приведенном ниже идеально правильном варианте этой команды:

add-adgroupmember -identity folks -members user2,user3

То, что –identity и –members можно опустить, я узнал после ознакомления с текстом интерактивной справки PowerShell. С помощью команды get-help add-adgroupmember –full я получил много полезной информации. При чтении справочной информации возникает искушение сразу перейти к примерам, но все же стоит потратить время на изучение текста, касающегося параметров. Вы быстро поймете, насколько важными являются параметры –identity и –members, поэтому их стоит как следует изучить. Фрагмент описания –identity выглядит следующим образом:

Required? true
Position? 1
Default value

Эти три строки содержат много ценных сведений, в частности: параметр –identity в команде add-adgroupmember можно опустить (Required? true), значение по умолчанию отсутствует (после Default value значение не указано). Наибольший же интерес представляет строка Position? 1.

Для 99 % параметров PowerShell в этой строке указано Position? named, что означает необходимость использования имени параметра (например, –identity folks). Редкий случай, когда здесь указано число, безусловно, означает возможность использовать это число как именованный параметр, однако, помимо этого, если просто ввести некое значение в качестве первого слова после команды, то PowerShell будет рассматривать это значение так, как если бы перед ним стояло имя параметра (в данном случае, –identity). В справочном тексте для –members в соответствующей строке указано Position 2, то есть имя этого параметра также можно опустить. Позиционные параметры не так уж часто встречаются в командах AD и всегда оказываются драгоценными находками, поэтому затраты времени на изучение текста справки себя оправдывают.

Наконец, у get-adgroupmember есть и недостатки: возвращаемый этой командой объект пользователя содержит лишь около десятка атрибутов. Кроме того, у get-adgroupmember отсутствует параметр –searchbase, то есть база поиска, позволяющая извлекать лишь некоторое подмножество учетных записей пользователей домена. Однако применение методик, о которых говорилось выше, позволяет реализовать эти возможности для данной команды.

Обратимся к задаче извлечения членов группы folks и даты их последней регистрации в сети. Команда get-adgroupmember folks возвращает членов группы, однако без указания интересующей нас даты. Вспомним, как мы решили эту проблему ранее для search-adaccount, и поступим аналогично в отношении adgroupmember:

get-adgroupmember -r folks | get-aduser -properties lastlogondate

Таким образом, вначале мы извлекаем учетные записи с неполным набором атрибутов, затем передаем их на вход команде get-aduser. Участие get-aduser позволяет применить параметр –properties, что удобно и вполне эффективно, поскольку get-adgroupmember работает быстро и, как правило, возвращает лишь небольшое число объектов, поэтому их обработка командой get-aduser также занимает очень мало времени.

Что же касается отсутствия базы поиска (–searchbase), то есть возможности сужения диапазона поиска, то эту проблему мы рассмотрим в следующей статье, где вновь сможем убедиться в том, что PowerShell обычно предусматривает несколько способов сделать одно и то же.