Удобный административный сценарий расширяет функции остановки Windows

С каждой новой версией Windows инструментарий Microsoft становится все более удобным для администратора, но большинству встроенных утилит по-прежнему свойственны серьезные ограничения. Пример — известная утилита Shutdown, которая была интегрирована с операционной системой в Windows XP и обновлена для Windows Server 2003. С помощью Shutdown можно перезагрузить, остановить или отключить компьютер, но из-за некоторых ограничений утилита мало пригодна для использования на предприятии. Приведем примеры.

  • В Shutdown нет функций тестирования. Единственный способ выяснить, можно ли остановить систему, — действительно остановить ее перед использованием утилиты Shutdown.
  • При каждом запуске Shutdown можно остановить только один компьютер.
  • Shutdown не позволяет аутентифицировать удаленную машину с защитой на уровне PKI (public key infrastructure — инфраструктура открытых ключей).
  • Shutdown не позволяет выбрать привилегированную учетную запись для остановки удаленного компьютера.

Я подготовил сценарий на VBScript, StopComputer, для использования на предприятиях в тех случаях, когда возможностей встроенной в Windows утилиты Shutdown недостаточно. В StopComputer используется метод Win32Shutdown класса Win32_OperatingSystem Windows Management Instrumentation (WMI), который позволяет останавливать, перезагружать или завершать сеанс из сценария. В данной статье рассматриваются принципы работы и применение утилиты. StopComputer совместим с Windows 2000 и более поздними версиями без дополнительной настройки операционной системы. Его можно применять и с системами Windows NT Server 4.0, если установить расширения WMI на системах, управляемых с помощью StopComputer. Для работы утилиты необходимо развернуть Windows Script Host (WSH) 5.6 или более позднюю версию.

У StopComputer имеется несколько ограничений. С помощью данной утилиты нельзя прямо протоколировать причины остановки, и она не может самостоятельно посылать сообщения по сети. Кроме того, в целях безопасности с помощью утилиты нельзя остановить локальный компьютер (на котором она запущена). Однако, как сценарий групповой обработки, StopComputer легко интегрируется с другими инструментами, предназначенными для решения этих задач. Другой способ — изменить StopComputer, добавив компоненты с функциями протоколирования (чтобы указать причины завершения работы) и пересылки сетевых сообщений.

Предварительная подготовка

Во-первых, нужно загрузить полный исходный текст сценария StopComputer, опубликованный на сайте Windows IT Pro/RE. Для этого следует обратиться по адресу http://www.windowsitpro.ru. Файлы stopcomputer.wsf и stopcomputer.cmd требуется сохранить в одной папке. Файл .cmd обеспечивает перенаправление входных и выходных данных для файла .wsf, чтобы для запуска сценария было достаточно ввести команду

stopcomputer

Расширение .cmd указывать не обязательно, так как cmd.exe отыскивает .cmd-файлы раньше файлов .wsf.

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

Сотрудникам необходимо разъяснить политику завершения работы; например, плановые мероприятия в целях экономии, безопасности и обслуживания могут проводиться по ночам, а ремонтные и аварийные завершения работы соединенных с Internet компьютеров — при первых признаках вирусов или взлома сети. Осведомленные о политике завершения работы пользователи скорее воспримут внезапную потерю сетевого соединения или дистанционную перезагрузку машины как защитную меру, чем как случайный сбой по вине ИТ-подразделения.

Еще один способ подготовить пользователей к остановке — провести тренировку в сети. Следует также активизировать в программах функции автоматического сохранения и восстановления. Например, можно настроить Microsoft Excel на автоматическое сохранение информации для восстановления, щелкнув в меню Tools, Options, Save Autorecovery. Такие функции резко снижают вероятность потери данных даже во время принудительной перезагрузки при реальной работе пользователей.

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

StopComputer позволяет произвести в отношении системы четыре действия: выполнить тестовое завершение работы, перезагрузить компьютер, завершить работу на компьютере, но оставить его включенным и выключить компьютер. Для тестового завершения работы следует запустить команду Stopcomputer с ключом /w (what if — что, если); это позволяет проверить, удастся ли остановить систему на практике.

Благодаря возможности провести тестовое завершение работы можно заранее обнаружить проблемы с системным доступом, не останавливая компьютеры. Например, чтобы провести тестовое завершение работы удаленных серверов TS01, TS02 и TS03, нужно ввести команду

stopcomputer /w ts01 ts02 ts03

Если тест пройдет успешно, то команда выдает на экран имя системы, за которым следует надпись SUCCESS; если тест заканчивается неудачей, то на экране появляется имя машины с надписью FAILED и кодом ошибки. Уровень детализации сообщений можно изменить с помощью ключей /v+ и /v-, о которых будет рассказано ниже.

Для перезагрузки компьютера нужно указать ключ /r (reboot). Например, чтобы перезагрузить контроллер домена (domain controller, DC), требуется выполнить команду

stopcomputer /r dc01

Чтобы завершить работу компьютера, но оставить его включенным, следует указать ключ /s (shutdown):

stopcomputer /s dc01

И наконец, для полного отключения машины требуется запустить команду StopComputer с ключом /p (power-off):

stopcomputer /p dc01

Если указан тестовый ключ /w, то сценарий игнорирует параметры /r, /s и /p. Если указано более одного ключа завершения работы (/r, /s или /p), сценарий предупреждает об ошибке и завершает работу.

Иногда процесс завершения работы проходит не так, как предполагается. Процесс завершения работы может быть прерван «зависшим» приложением или открытым и незавершенным пользователем сеансом с несохраненными данными. Чтобы принудительно завершить работу приложения, можно запустить команду StopComputer с ключом /f (force), который останавливает систему, не оповещая активные приложения. Например, команда stopcomputer ts1 ts2 /s /f принудительно закрывает два терминальных сервера, TS1 и TS2.

Богатый выбор режимов

Ключи StopComputer позволяют останавливать компьютеры множеством различных способов. Эти режимы перечислены на экране. Как и большинство инструментов групповой обработки, StopComputer использует в качестве входных данных параметры командной строки (например, имена закрываемых компьютеров) или, если параметры не указаны, стандартный входной поток (например, текстовый файл, содержащий список имен компьютеров). В частности, чтобы принудительно завершить работу нескольких компьютеров, интерактивно вводя их имена, нужно воспользоваться командой

stopcomputer /s /f

После ввода команды на экране под ней появляется пустая строка. В ней можно ввести имена компьютеров, для которых нужно завершить работу, нажимая клавишу Enter после каждого имени. После того как ввод имен будет завершен, следует просто дважды нажать комбинацию клавиш Ctrl+C.

Или же можно запустить команду с заранее составленным списком компьютеров. Например, файл kiosks.txt содержит имена общих систем, работу которых требуется завершить вечером в пятницу. Чтобы сделать это с помощью StopComputer, нужно запустить команду

stopcomputer /p /f < kiosks.txt

Очень удобно иметь инструмент, который генерирует отфильтрованный список компьютеров и передает в стандартный выходной поток. Выходные данные можно направить прямо в StopComputer. Предположим, сценарий Getwebservers.cmd динамически генерирует список общедоступных Web-серверов, и администратору нужно принудительно перезагрузить эти Web-серверы. Для этого следует запустить команду

getwebservers | stopcomputer/r /f

Полномочия

Работа с учетной записью с ограниченными полномочиями — похвальная привычка, и утилита Shutdown не будет работать без Shutdown (т. е. нужно применить команду Runas для запуска команды Stopcomputer). Более того, нельзя дистанционно завершить работу изолированных систем с особыми учетными записями и паролями; это еще одно неудобство, связанное с высоким уровнем безопасности.

Сценарий StopComputer в некоторой степени учитывает ограничения, накладываемые на наличие полномочий. Например, если текущая учетная запись не располагает достаточными полномочиями, чтобы завершить работу удаленной системы, операцию все же можно выполнить, указав имя и пароль пользователя, чей компьютер требуется остановить. Для этого нужно запустить команду StopComputer с ключом /u (username), за которым следуют имя и пароль пользователя, владельца останавливаемой системы, в формате username:password, например

stopcomputer /u alibaba:sesame

Системные администраторы, серьезно относящиеся к безопасности, не одобрят метод, при котором информация о пароле и имени пользователя видна каждому, кто может пройти мимо экрана компьютера администратора. Чтобы не показывать пароль, можно ввести в команду StopComputer только имя пользователя; StopComputer запросит пароль, который не отображается на экране.

Управление остановкой и другие проблемы

Информация, выводимая на консоль, зависит от того, как администратор намерен просматривать и использовать результаты команды. По умолчанию, если сценарий успешно обращается к системе, StopComputer распечатывает имя компьютера в стандартном формате с последующим словом «SUCCESS». Если попытки доступа или завершения работы были неудачными, то на экране появляется имя компьютера со словом «FAILED» и кодом ошибки. В листинге показан фрагмент обработки ошибок из сценария StopComputer. Значение кодов ошибок можно установить с помощью команды

net helpmsg

Чтобы вывести на экран полный текст сообщения при попытке завершить работу системы, можно применить в команде StopComputer ключ /v+ (verbose). Ко всем выводимым на экран сообщениям прилагаются описания ошибок.

Запретить отображение сообщений SUCCESS и FAILED можно с помощью ключа /v- (nonverbose). В результате StopComputer выводит информацию об успешно остановленных системах в стандартном выходном формате, а остальным системам присваивается стандартный код ошибки. Если указан ключ /v-, то визуально определить успех или ошибку при завершении работы системы нельзя; если стандартные ошибки и выходные данные не пересылаются в другую команду или файл, то и те и другие будут представлены лишь именами в окне консоли.

Заслуживают упоминания еще два параметра, которые иногда стоит применить. Ключ /a (authentication) позволяет указать уровень аутентификации WMI как число от 0 до 6. Уровень аутентификации Pkt (4) гарантирует совместимость StopComputer с Windows XP и новыми системами, в которых применяются строгие меры безопасности.

Ключ /d (delay) указывает время задержки (в секундах) между каждой попыткой завершения работы удаленной машины; по умолчанию в StopComputer установлена двухсекундная задержка. Задержка позволяет остановить выполнение сценария (нажатием комбинации клавиш Ctrl+C) при обнаружении ошибки (например, неправильное имя системы) после запуска команды StopComputer.

Мощный инструмент

StopComputer расширяет возможности утилиты Windows Shutdown, позволяя останавливать множество удаленных машин. Кроме того, с помощью StopComputer можно выполнить проверку завершения работы систем — полезная функция для подготовки к будущим аварийным операциям. StopComputer можно дополнить функциями подготовки отчетов о причинах завершения работы и отправки сетевых сообщений пользователям или завершения интерактивного режима работы вводом с клавиатуры Quit вместо двойного нажатия Ctrl+C. Так или иначе, StopComputer будет полезным дополнением к инструментальному набору администратора.


Алекс Ангелопулос (alexangelopoulos@hotmail.com) — специалист по сетям, консультирующий в Индиане. Имеет сертификаты MCSE, MCP+I и MVP.