Новые утилиты упрощают написание сценариев.

Операционные системы Windows компании Microsoft своим ранним успехом обязаны графическому интерфейсу, разительно отличавшему их от привычных операционных систем с текстовым интерфейсом. До сих пор не могу забыть, какое впечатление произвел на меня интерфейс Windows 3.0 после нескольких лет работы за системами с монохромными дисплеями размером 24*80 символов. Тем не менее, по мере совершенствования операционных систем, разработчики Microsoft все больше убеждались, что утилиты командной строки превосходят свои графические аналоги во многих ситуациях. Самый простой пример — автоматизация. С помощью нескольких утилит командной строки и пакетного файла можно создать такое задание в планировщике задач, какое практически невозможно сгенерировать, используя оснастки Microsoft Management Console (MMC). Современные администраторы располагают богатым набором ресурсов для работы со сценариями, включая языки, такие, как VBScript, и интерфейсы, например Active Directory Service Interfaces (ADSI) и Windows Management Instrumentation (WMI).

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

Пакет программ под названием Command Line Management, реализованный Microsoft в Windows Server 2003, предназначен именно для этих нужд администратора. Предлагаю вниманию читателей обзор девяти утилит командной строки Windows Server 2003, которые группа программистов создала или усовершенствовала, исходя из существующих инструментов.

Предварительные замечания

Одна из целей программы Command Line Management — предоставить администраторам утилиты командной строки для решения задач управления высокого уровня. Гибкость и мощность таких утилит, позволяющих любому администратору писать сценарии, — не единственные их достоинства. Эти программы представляют собой усовершенствованные во многих отношениях предыдущие инструменты.

  • Все утилиты имеют стандартный синтаксис, что сокращает количество времени, необходимое администраторам для изучения каждой из них в отдельности.
  • Выполнять программы на сервере можно в удаленном режиме без необходимости регистрироваться непосредственно на консоли.
  • Утилиты поддерживают работу под другой учетной записью, поэтому могут функционировать в защищенной среде, в которой администратор, как правило, не является привилегированным пользователем.
  • Имеется описание утилит в справочной системе Windows 2003 (раздел command line reference) и в готовящемся к выпуску комплекте ресурсов Windows 2003 Resource Kit. Если есть желание изучить справочную информацию по данным утилитам, можно скопировать файл \%windir%help tcmds.chm на свою локальную систему и открыть его там.

Как уже отмечалось выше, не все рассматриваемые утилиты являются новыми. Многие из них, например Shutdown, входят в комплект ресурсов или в Windows 2003 Support Tools и представляют собой усовершенствованные и стандартизованные варианты старых утилит. Чтобы работать со многими из этих инструментов, необходимо знание соглашения об отличительных именах (distinguished name, DN) для описания объектов Active Directory (AD). DN объекта AD описывает этот объект и его местонахождение в иерархии AD. Домену предшествует DC= (domain component); организационной единице — OU=; другим объектам — CN= (common name). DN начинается с названия самого объекта и идет к вершине иерархии AD. Например, DN контроллера домена в домене BigTex.net могло бы быть CN=firstdomcont,OU=domain controllers,DC=bigtex,DC=net. Если бы контроллер домена находился в дочернем домене Sales, то его DN было бы CN=firstdomcont,OU=domain controllers,DC=sales,DC=bigtex,DC=net. Если имя одного из объектов содержит пробел, DN необходимо заключать в кавычки. Не следует вставлять пробел между запятой и следующей далее частью имени объекта. Я стараюсь использовать заглавные буквы в написании CN, OU и DC, но это не обязательно.

Нужно соблюдать осторожность, если при создании сценариев на базе утилит командной строки используется не Notepad, а какой-то другой редактор. По умолчанию Microsoft Word добавляет автоматические кавычки, заменяет два идущих подряд дефиса длинным тире и использует другие символы для улучшения вида текста. В результате можно потратить два часа на проверку синтаксиса команд и обнаружить, что он правильный, но в коде утилиты содержится несколько неотображаемых символов.

Утилита Adprep

Adprep стоит первой в списке рассматриваемых новых утилит командной строки, относящихся к AD, поскольку, как можно догадаться по названию, данная программа используется для подготовки существующей службы каталогов Windows 2000 AD к модернизации до Windows 2003. Если на предприятии планируется установить Microsoft Exchange 2000 Server и Active Directory Connector (ADC), то придется работать с предыдущей версией Adprep. Несмотря на то что модернизация контроллера домена, на котором установлена Windows 2000, до Windows 2003 проста, использование Adprep является во многом новым шагом в этой модернизации серверных операционных систем Windows.

Adprep имеет два переключателя: /forestprep и /domainprep. Следует использовать /forestprep для модернизации схемы AD с Windows 2000 версии 13 до Windows 2003 версии 30. В процессе модернизации Adprep выполняются те же действия, что и при запуске утилиты Ldifde для каждого из 17 файлов .ldf (от sch14.ldf до sch30.ldf). Более подробную информацию об утилите Ldifde можно найти в статье Microsoft «Using LDIFDE to Import and Export Directory Objects to Active Directory», http://support.microsoft.com/?kbid=237677. Каждый файл .ldf содержит обновления схемы (новые классы и атрибуты объекта или изменения существующих), которые разработчики Microsoft создали в процессе выполнения бета-программ. Желающие увидеть эти обновления могут росмотреть .ldf-файлы в папке i386 на компакт-диске с Windows 2003. Переключатель /forestprep запускается один раз для целого леса, в результате чего обновления должны реплицироваться на каждый контроллер домена в лесу, и только после этого можно переходить к следующему шагу — запуску с /domainprep. На Экране 1 изображено обновление схемы с версии 29 до версии 30.

При использовании /domainprep происходит обновление объектов AD и системы безопасности (т. е. записей ACE) для каждого домена. Переключатель /domainprep должен запускаться с консоли контроллера домена, исполняющего роль мастера инфраструктуры в каждом домене. Утилита с /domainprep работает значительно быстрее и имеет намного меньше выходных данных, чем /forestprep. Если все идет нормально, то на экране появится единственная строчка:

Adprep successfully updated the domain-wide information.

(Adprep успешно выполнила обновление информации для домена.)

Adprep хранится в папке i386 на компакт-диске Windows 2003. Она не устанавливается по умолчанию в папку %windir%, в отличие от остальных инструментов командной строки, рассматриваемых в этой статье. Для успешной работы Adprep /forestprep необходимо:

  • зарегистрироваться на консоли контроллера — мастера схемы;
  • иметь на всех контроллерах доменов по крайней мере Windows 2000 Service Pack 2 (SP2 — SP3);
  • быть членом обеих групп Enterprise Admins и Schema Admins.

Для того чтобы запустить Adprep /domainprep, требуется:

  • зарегистрироваться на контроллере — мастере инфраструктуры;
  • быть членом группы Enterprise Admins или членом локальной группы Domain Admins.

Значительно подробнее о критически важном процессе подготовки леса Windows 2000 к модернизации до Windows 2003 рассказано в руководстве на компакт-диске Windows 2003 «Preparing for Upgrades in a Domain Containing Windows 2000 Domain Controllers», раздел 4.1, файл docsxxxsrv1.txt (где xxx — это номер продукта).

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

Утилита Dsadd

Утилита Dsadd добавляет в AD наиболее общие типы объектов: пользователей, компьютеры, группы (безопасности и маршрутизации), организационные единицы и даже контакты. Можно указывать многие общие атрибуты для добавления объектов, но эта команда не поддерживает все возможные объекты.

Чтобы добавить организационную единицу в BigTex.net, нужно ввести весь следующий текст в одной строке:

dsadd ou OU=roughnecks,

DC=bigtex,DC=net

-desc «Oilfield Roughnecks»

Чтобы добавить группу в новую организационную единицу, следует ввести:

dsadd group CN=goodolboys,

OU=roughnecks,DC=bigtex,

DC=net -secgrp yes

В процессе создания группы в нее с помощью ключа -members можно добавлять пользователей, одновременно делая их членами других групп с помощью ключа -memberof. Для того чтобы добавить в новую группу пользователя по имени Jim Bob, требуется ввести:

dsadd user «CN=James Robert, CN=Users,DC=bigtex,DC=net»

-samid JIMBOB

-upn jimbob@bigtex.net

-fn James -ln Robert -empid 123456 -pwd n0tsecure!

-mustchpwd yes

-memberof CN=goodolboys,

OU=roughnecks,DC=bigtex,DC=net

Я указал пароль, чтобы иметь возможность добавлять нескольких пользователей, не прерываясь каждый раз для ввода пароля. Однако поскольку параметру mustchpwd присвоено значение yes, пользователи должны изменить свои пароли при первой регистрации.

Утилита Dsquery

При помощи двух новых утилит командной строки можно получать информацию о восьми типах объектов AD Windows 2003: сайтах, подсетях, серверах, компьютерах, организационных единицах, группах, пользователях и контактах. Dsquery предназначена для расширенного поиска и поддерживает использование шаблонов (*) для поиска любых объектов, удовлетворяющих заданному критерию. Утилита Dsget более специфична. Она служит для просмотра свойств конкретных объектов в AD.

На Экране 2 показан синтаксис Dsquery с наиболее распространенными параметрами и их возможными значениями. В первом параметре Dsquery можно указать одно из трех значений: начальный узел поиска; forestroot, чтобы использовать GC; domainroot (значение по умолчанию), чтобы начать в корне домена, к которому осуществлялось подключение. Параметр -scope определяет, насколько глубоко следует выполнять поиск: subtree (значение по умолчанию) означает поиск по нижним уровням иерархии, начиная с данного узла; onelevel — отсутствие поиска по нижним уровням, а base — поиск только того объекта, который указан в StartNode. Параметр -filter позволяет задействовать фильтр запроса Lightweight Directory Access Protocol (LDAP), если нужно извлечь только конкретный объект или атрибут. Вот пример поиска с фильтром: (&(objectCategory=Person)(sn=smith*)). Параметр -attr возвращает только атрибуты, указанные в списке AttributeList; параметр -attrsonly выводит только сами атрибуты, но не их значения. Параметр -l возвращает результаты в формате списка вместо установленного по умолчанию формата таблицы.

Экран 2. Синтаксис Dsquery.
dsquery * [{StartNode | forestroot | domainroot}]

[-scope {subtree | onelevel | base}] [-filter LDAPFilter]

[-attr {AttributeList | *}] [-attrsonly] [-l]

Например, если имеется разветвленная структура AD со многими подсетями, то с помощью следующей команды Dsquery можно выполнить поиск конкретной подсети, не путаясь в определениях подсетей в оснастке Active Directory Sites and Services консоли MMC:

dsquery * cn=subnets,cn=sites,

cn=configuration,dc=bigtex,

dc=net -scope subtree

Результат выполнения команды показан на Экране 3.

Утилита Dsget

С помощью утилиты Dsget можно узнать определенные свойства объектов AD. Как и во всех других случаях, в этой утилите командной строки, относящейся к AD, выбор объекта осуществляется по его DN. На Экране 4 показан общий синтаксис Dsget. DN — это DN объекта, поиск которого выполняется, а список AttributeOptions содержит до 33 атрибутов (например, -empid, -office), которые требуется вывести на экран. Число доступных атрибутов варьируется в зависимости от объекта.

Например, чтобы проверить, не установлено ли для пароля пользовательской учетной записи свойство never expire (настройка, которая обычно означает исключение из общих правил безопасности), можно ввести:

dsget user «cn=James Robert,

OU=roughnecks,DC=bigtex,

DC=net» -pwdneverexpires

И получить следующий результат:

pwdneverexpires

yes

dsget succeeded

Утилита Dsmod

Утилита Dsmod изменяет существующие в AD учетные записи пользователей, группы, организационные единицы и контакты. Например, можно изменить членство в группе и ее тип. С помощью параметра OU утилиты Dsmod — параметра менее полезного, чем остальные, — можно лишь изменить описание организационной единицы. Для того чтобы восстановить пароль пользователя по имени Jim Bob и заставить его сменить пароль при следующей регистрации, нужно ввести:

dsmod user «CN=James Robert,

CN=Users,DC=bigtex,DC=net»

-pwd Uf@tfingeredIt

-mustchpwd yes

Если необходимо заблокировать учетную запись данного пользователя, следует ввести:

dsmod user «CN=James Robert,

CN=Users,DC=bigtex,DC=net»

-disabled yes

Для того чтобы восстановить учетную запись, нужно ввести:

dsmod computer CN=JimBobsPC,

CN=goodolboys,CN=roughnecks,

DC=bigtex,DC=net -reset

Чтобы изменить тип группы GoodOlBoys с глобального на универсальный, необходимо ввести:

dsmod group CN=GoodOlBoys,

CN=roughnecks,DC=bigtex,

DC=net -scope u

Как показывает следующий пример, команда Dsmod server дает более простое решение задачи назначения сервера для глобального каталога (GC), чем щелканье мышью в оснастке Active Directory Sites and Services:

dsmod server CN=firstdomcont,

CN=servers,

CN=default-first-site-name,

CN=configuration,DC=bigtex,

DC=net -isgc yes

Нужно иметь в виду, что DN сервера, который требуется сделать сервером GC, не совпадает с именем, отображаемым в оснастке Active Directory Users and Computers консоли MMC. Имя, которое необходимо ввести, соответствует DC в контексте именования конфигурации. Секция Sites в оснастке Active Directory Sites and Services — это как раз и есть контейнер узлов в контексте именования конфигурации.

Утилита Dsmove

Утилита Dsmove перемещает объект в пределах домена. Для перемещения объектов между доменами понадобится инструмент Movetree из набора Support Tools на компакт-диске Windows 2003.

Dsmove имеет два ключа: -newname и -newparent. В следующем примере показано, как использовать ключ -newname для переименования объекта:

dsmove CN=sdeuby,CN=users,

CN=bigtex,CN=com

-newname "CN=Sean Deuby"

Для переименования объекта с ключом -newname нужно указывать только относительное отличительное имя (relative distinguished name, RDN) объекта, а не DN целиком. Если требуется переместить объект SDeuby в подразделение Roughnecks того же домена, следует использовать ключ -newparent, как показано в следующем примере:

dsmove CN=sdeuby,CN=users,

CN=bigtex,CN=com

-newparent OU=roughnecks,

DC=bigtex,DC=net

В этом случае необходимо точно указать перемещаемому объекту его место назначения, вводя полное имя DN родительского объекта назначения (организационная единица Roughnecks в Bigtex.net).

Утилита Dsrm

В отличие от других DS-утилит, Dsrm довольно проста: она удаляет объект AD, отличительное имя DN которого было указано. Помимо параметров для альтернативных учетных данных и серверных подключений, общих для всех этих инструментов, Dsrm имеет только два параметра. Параметр -subtree означает, что требуется удалить как сам объект, так и все объекты, стоящие ниже его в иерархии. Если параметр -subtree не используется, Dsrm удаляет только объект. Переключатель -exclude параметра -subtree сохраняет объект и удаляет все объекты ниже его в иерархии. Параметр -noprompt отключает запрос на подтверждение удаления. Например, команда

dsrm OU=roughnecks,DC=bigtex,

DC=net -subtree -exclude

-noprompt

удаляет все объекты в организационной единице Roughnecks, но саму организационную единицу оставляет без изменения.

Утилита Shutdown

Изначально Windows 2000 и Windows NT не имели утилит командной строки для штатного отключения системы. Чтобы восполнить этот пробел, разработчики Microsoft добавили в состав Windows 2000 Server Resource Kit утилиту Shutdown, которая выполняет базовые функции штатного отключения, такие, как перезагрузка, принудительное завершение работающих приложений, предоставление простого графического интерфейса и установка таймера штатного отключения. Утилита Shutdown имеет также ключ (/a), который отключает таймер обратного отсчета. Желательно не забывать про этот ключ, чтобы потом лихорадочно не метаться, пытаясь вспомнить его за 30 с до отключения системы.

В Windows 2003 утилита Shutdown «переехала» из Resource Kit в папку %windir%system32. Теперь из командной строки можно выполнять практически все операции, относящиеся к штатному отключению и перезагрузкам: штатное отключение (/s), перезагрузка (/r), выключение питания (/p), переход в пониженный режим энергопотребления (/h), завершение работы активных приложений (/f), отмена (/a). Кроме того, можно использовать ключ /l, для завершения сеанса без отключения системы.

Усовершенствованный графический интерфейс, показанный на Экране 5, позволяет выключать несколько компьютеров одной командой и указать причину отключения или перезагрузки компьютеров. Графический интерфейс Shutdown вызывается командой

shutdown /i
Экран 5. Графический интерфейс настройки штатного отключения в удаленном режиме.

Новый обработчик событий штатных отключений (Shutdown Event Tracker) пытается собирать причины каждого отключения, инициированного администратором. Если произошло неожиданное отключение системы, то при первом входе администратора в систему после перезагрузки появляется диалоговое окно с перечнем причин. Команда Shutdown позволяет также задокументировать причину отключения, используя ключ /d и одну из 23 причин. Например, команда

shutdown /r /t 30 /f

/d p:02:04 /c:"This is a test

of the SHUTDOWN

command line utility"

перезагружает компьютер через 30 с, закрывая активные приложения, оставляя в системном журнале сообщение и указывая причину перезагрузки как «Operating System: Reconfiguration (planned)». В новой версии Shutdown предусмотрен файл справки, который открывается щелчком по Help в окне графического интерфейса Shutdown.

Утилита Bootcfg

bootcfg /query

Windows отобразит на экране системный файл boot.ini примерно так, как показано на Экране 6.

Можно также использовать Bootcfg в пакетном файле, который меняет последовательность начальной загрузки DC, чтобы автоматически загружаться в режим Directory Service Repair (DSREPAIR). Содержимое такого пакетного файла показано в Листинге 1. Если первая запись операционной системы в файле boot.ini имеет вид

multi(0)disk(0)rdisk(0)

partition(1)WINNT="Windows

Server 2003" /fastdetect

то пакетный файл сначала скопирует эту запись, чтобы использовать ее в качестве основы для новой записи. Затем пакетный файл добавит во вторую запись параметры загрузки операционной системы, которые включают DSREPAIR, и присвоит новой записи ID 2. Затем пакетный файл сделает эту запись назначаемой по умолчанию. С помощью такого простого сценария можно было бы удаленно перевести контроллеры доменов в режим DSREPAIR, чтобы выполнять задачи, наподобие автономной дефрагментации базы данных AD.

Утилиты командной строки Windows 2003 гораздо эффективнее набора утилит Windows 2000. С их помощью можно быстро разрабатывать мощные сценарии, даже не имея опыта работы с VBScript, и создавать короткие пакетные файлы, выполняющие общие запросы. Эти утилиты — еще один довод в пользу модернизации Windows 2000.