Приветствую всех, кто следит за обсуждением автоматизации AD (см. статьи «Гибкий однострочник Active Directory» и «Продолжаем изучать ForEach», опубликованные в Windows IT Pro/RE №6 и №5 за 2014 год). Мы уже далеко продвинулись по пути использования PowerShell, этого превосходного средства экономии времени. В предыдущей статье мы изучили однострочную команду

get-aduser -filter * -properties * | foreach { set-aduser $_ -displayname ($_.givenname + «" + $_.sn)}

С помощью этой команды можно очистить учетные записи AD, составив имя пользователя из имени (givenname в обозначениях AD) и фамилии (sn) сотрудника, а затем поместить новое имя в поле Display Name («Отображаемое имя») учетной записи пользователя. Для одних этот результат тривиален, а для других это способ добиться единообразия реализации AD.

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

Большинство слушателей на моих курсах PowerShell напрягаются, когда слышат»сценарий«, потому что сразу вспоминают о программировании. Всем известно, как трудно программировать! Хотя на самом деле это не так сложно. Думаю, вы сами убедитесь в этом.

Начните подготовку с создания на компьютере папки для сохранения сценариев. Я назвал свою C:\scripts. Откройте командную строку с повышенными привилегиями и воспользуйтесь командой CD, чтобы назначить папку сценариев папкой по умолчанию (cd C:\scripts в моем случае). Запустите PowerShell, если не сделали этого ранее.

Сценарии PowerShell просты: в сущности, вы вводите одну или несколько команд PowerShell в текстовый файл и сохраняете его с расширением. ps1. Затем, всякий раз, когда нужно запустить этот набор команд PowerShell, вы открываете командную строку PowerShell и вводите имя сохраненного текстового файла. PowerShell интерпретирует и выполняет команды, избавляя пользователя от необходимости повторно вводить такие длинные однострочные команды, как наша. Начнем именно с нее.

Во-первых, откройте блокнот Notepad. Скопируйте однострочную команду в текстовый файл без изменений. Во-вторых, сохраните файл с именем fixDNs.ps1 в своей папке сценариев. Помните, эта однострочная команда изменяет AD, перезаписывая атрибут DisplayName каждой учетной записи. Поэтому выполняйте эксперимент в тестовой среде AD (в ней должно быть хотя бы несколько учетных записей с заполненными атрибутами givenname и sn) или измените однострочную команду так, чтобы она не вносила никаких изменений. Для этого добавьте параметр –whatif к set-aduser, например:

get-aduser -filter * -properties * | foreach { set-aduser $_ –displayname ($_.givenname +» «+ $_.sn) -whatif}

Если вы работаете в тестовой среде AD или внесли в fixDNs.ps1 соответствующие изменения, можно разрешить запуск PowerShell в Windows (по умолчанию они заблокированы). Это можно сделать с помощью команды

set-executionpolicy RemoteSigned

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

. \fixdns

Обратите внимание на точку и обратную косую черту. Они подтверждают PowerShell, что вы выполняете нужный сценарий, а именно fixdn.ps1.

После нажатия клавиши Enter вы получаете несколько строчек красным шрифтом (это означает, что не удается установить контакт с контроллером домена — DC — для запуска команд get-aduser или set-aduser; вы не выполнили регистрацию с учетными данными администратора домена; допущена опечатка при вводе команды set-executionpolicy или администратор вашего домена создал групповую политику, блокирующую запуск команды set-executionpolicy) либо не получаете ничего (что вполне объяснимо, если выполнена первоначальная версия однострочной команды, изменяющая AD). Или же, если выполнена версия с параметром –whatif, добавленным к команде set-aduser, вы получаете набор строк, которые выглядят примерно так:

What if: Performing operation»Set«on Target»CN=mark,CN=Users,DC=bigfirm,DC=com".

Обратите внимание на первое преимущество сценария PowerShell: требуется гораздо меньше нажатий на клавиши. Ввести с клавиатуры. \fixDNs намного проще, чем длинные однострочные команды. Но это пустяки по сравнению с темой, которую мы рассмотрим в следующей статье: разбиение длинной, малопонятной однострочной команды на несколько более компактных, ясных строк.