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

Создание журналов событий и управление ими

Для создания журналов событий и управления ими из командной строки в Windows 2003 и XP имеется три программных инструмента: Eventcreate.exe, Eventquery.vbs, и Eventtriggers.exe. С помощью Eventcreate.exe можно создавать события в системном журнале Windows NT. Например, если нужно создать в журнале приложений запись, соответствующую сообщению об ошибке, применяется следующая команда:

Eventcreate /S vm75459312b.LissWare.Net

/L application

/SO «Eventcreate TEST»

/T Error

/ID 999

/D «Event log creation with Eventcreate.exe»

С помощью ключа /S задается имя сервера, ключ /L определяет используемый журнал событий, в ключе /SO указывается имя источника, который является причиной события. Ключ /T определяет тип создаваемого события (например, success (успех), error (ошибка), warning (предупреждение) или information (информация)). Через ключ /ID определяется идентификатор ID записи журнала событий. Ключ /D позволяет снабдить данное событие соответствующим описанием. Если для доступа к удаленной системе требуются полномочия, отличные от тех, которые имеет текущий пользователь, то с помощью ключа /U можно указать имя требуемой учетной записи в виде «доменимя пользователя», а с помощью ключа /P задать соответствующий пароль. Для получения более полной информации о допустимых ключах и параметрах утилиты следует использовать ключ /?.

После того как мы создали в журнале запись, соответствующую определенному событию, ее можно просмотреть с помощью Eventquery. Данный инструмент представляет собой сценарий, написанный на языке VBScript с использованием функциональности Windows Management Instrumentation (WMI), а именно класса Win32_NTEventlogFile. Например, если требуется найти созданное нами выше событие, то соответствующая команда будет выглядеть следующим образом:

C:>Eventquery /S vm75459312b.LissWare.Net

/L application

/FI «type eq Error»

И вновь здесь с помощью ключа /S задается имя сервера, а ключ /L определяет используемый журнал событий. Ключ /FI является специфичным для Eventquery, он определяет фильтр, применяемый для поиска записи в журнале событий. В рассматриваемом примере фильтр возвращает те записи журнала, которые имеют тип error. Разумеется, в ключе /FI могут задаваться и другие фильтры. Можно, например, организовывать поиск записи одновременно по ее типу (например, success, error или information) и идентификатору. При построении фильтра допускается комбинирование различных критериев, что иллюстрируется приведенной ниже командой, где для связи критериев применяется логический оператор (в данном случае это оператор AND):

C:>Eventquery /S vm75459312b.LissWare.Net

/L application

/FI «type eq errorAND id eq 999»

Как и в случае с Eventcreate, полный список допустимых ключей можно получить, используя ключ /?. Отмечу лишь, что здесь имеется возможность задать формат выводимых данных, для чего применяется ключ /FO (это может быть формат данных, разделяемых запятой (CSV — comma-separated value) или табличный (table) формат), а если требуется вывести дополнительную информацию о записях журнала событий, то нужно использовать ключ /V (verbose).

Возможность выполнения запросов для поиска тех или иных событий в журнале, безусловно, важна, но куда более интересно организовать выполнение какого-либо действия в качестве реакции на появление определенного события в журнале. Для этих целей служит утилита Eventtriggers, которая задействует механизмы мониторинга, имеющиеся в WMI. Допустим, нам нужно выключить систему после появления в журнале рассмотренного выше события. Это можно сделать с помощью следующей команды:

C:>Eventtriggers /S vm75459312b.LissWare.Net

/Create

/TR «Detect EventCreate»

/L application

/T ERROR

/EID 999

/TK «Shutdown.exe /S /T 0»

Ключ /S определяет имя системы, а ключ /Create предписывает сценарию создать новый триггер, имя которого задается при помощи параметра ключа /TR. Ключ /L предписывает использовать журнал приложений, обеспечивая фильтрацию не интересующих событий. При этом соответствующий триггер будет запускаться только при обнаружении записей, соответствующих событиям, имеющим тип error и идентификатор (ID) 999, что определяется соответственно ключами /T и /EID. Если нужно добавить критерий поиска по имени источника, послужившего причиной события, тогда следует задействовать ключ /SO. С помощью ключа /TK определяется задача, которая должна выполняться в качестве реакции на событие, в данном случае это отключение системы, выполняемое с помощью утилиты shutdown.exe. В данной утилите используется ключ /S, предписывающий выполнить выключение компьютера (shutdown), и ключ /T 0, который означает, что отключение системы должно быть выполнено немедленно (с интервалом ожидания 0 с).

Если осуществляется процедура выключения, то Eventtriggers попросит указать имя и пароль для проверки соответствующих полномочий. Отмечу, что применение команды в таком виде для промышленных систем может привести к проблемам, поскольку заданное в качестве условия событие может происходить достаточно часто, что в свою очередь приведет к регулярным выключениям соответствующей системы. Чтобы избежать подобной ситуации, нужно сузить критерии запроса (например, с помощью ключа /SO) и изменить тип используемого журнала, например, на security (журнал безопасности). Следует также переопределить тип рассматриваемых записей журнала, например, на failureaudit (неудачная попытка аудита). В качестве реакции на событие можно использовать какое-то более безобидное действие, чем выключение системы, например отправку соответствующего уведомления по электронной почте или через пейджинговую систему. Здесь мы не ограничены в выборе.

Для просмотра запущенных в системе триггеров может использоваться следующая команда:

C:>Eventtriggers /S vm75459312b.LissWare.Net /Query

В результате ее выполнения будет выведен список всех триггеров и соответствующих им задач. Нужно иметь в виду, что отслеживаться могут только те записи журнала, которые имеют статус information (информация), warning (предупреждение), successaudit (аудит выполнен успешно) и failureaudit (неудачная попытка аудита); записи типа success (успех) отслеживаться не могут.

Файл подкачки и файл Boot.ini

Для управления конфигурацией страничного файла из командной строки в системах Windows 2003

и XP предназначен сценарий PageFileConfig.vbs. В нем используется функциональность классов WMI Win32_PageFileSetting и Win32_PageFileUsage. При помощи ключей /Change, /Create и /Delete можно соответственно модифицировать, добавлять и удалять записи из файла boot.ini. Например, приведенная ниже команда позволяет изменить начальный и максимальный размеры страничного файла:

C:>PageFileConfig /Change /S vm75459312b.LissWare.Net

/I 512 /M 1024 /VO C:

Здесь ключ /I задает начальный размер файла, ключ /M — его максимальный размер, ключ /VO определяет имя тома. Если требуется создать страничный файл, тогда, как показано ниже, следует использовать ключ /Create в сочетании с аналогичным набором параметров:

C:>PageFileConfig /Create /S vm75459312b.LissWare.Net

/I 512 /M 1024 /VO D:

Чтобы внесенные изменения вступили в силу, компьютер необходимо перезагрузить. Сам рассматриваемый сценарий не выполняет перезагрузку системы, но, как мы знаем, это можно сделать из командной строки с помощью утилиты Shutdown. При необходимости просмотреть настройки страничного файла следует использовать ключ /Query. Если при запуске сценария не применяется никаких ключей, то по умолчанию он выполняет запрос конфигурации страничного файла системы и выводит соответствующую информацию на экран.

Управление содержимым файла boot.ini из командной строки осуществляется с помощью имеющейся в Windows 2003 и XP утилиты bootcfg.exe. Пользоваться этой программой очень просто. Допустим, у нас имеется компьютер с установленной стандартным образом системой Windows 2003. В этом случае в файле boot.ini есть только одна строка, аналогичная показанной на рис. 1. Чтобы создать в этом файле новую строку, нужно выполнить показанную ниже команду, при этом в boot.ini добавится запись, которая является копией существующей строки:

C:>Bootcfg /Copy /ID 1

/D «Windows Server 2003, Enterprise — EMS BOOT»

C:>type C:oot.ini

[boot loader]

timeout=30

default=multi(0)disk(0)rdisk(0)partition(1)WINDOWS

[operating systems]

multi(0)disk(0)rdisk(0)partition(1)WINDOWS=»Windows Server 2003, Enterprise» /fastdetect
Рисунок 1. Пример содержимого файла Boot.ini

Ключ /Copy предписывает утилите выполнить копирование той строки файла boot.ini, которая определяется ключом /ID (в данном случае файл содержит только одну строку). С помощью ключа /D можно присвоить копируемой строке необходимое описание. Для того чтобы активировать добавленную запись, используется служба Emergency Management Services (EMS). EMS представляет собой новый механизм удаленного управления, реализованный в Windows 2003. Для включения EMS при запуске утилиты Bootcfg применяется следующая команда:

C:>Bootcfg /EMS ON /PORT COM1 /BAUD 19200 /ID 2

Здесь ключ /EMS ON активирует EMS, а ключ /PORT служит для задания номера используемого COM-порта. С помощью ключа /BAUD устанавливается скорость обмена по выбранному порту. Ключ /ID предписывает выполнить модификацию второй строки файла, что соответствует только что добавленной строке. Для просмотра всех возможных параметров для настройки файла boot.ini нужно запустить утилиту с ключом /?.

Итак, файл boot.ini дополнен второй строкой, теперь можно сделать ее строкой, используемой по умолчанию. Для этого применяется ключ /Default:

C:>Bootcfg /Default /ID 2

На рис. 2 показан результат работы утилиты Bootcfg для модификации файла Boot.ini. Для того чтобы удалить внесенные изменения, запустим Bootcfg с ключом /Delete, как показано ниже:

C:>Bootcfg /Delete /ID 1

C:>type C:oot.ini

[boot loader]

timeout=30

default=multi(0)disk(0)rdisk(0)partition(1)WINDOWS redirect=COM1 redirectbaudrate=19200

[operating systems]

multi(0)disk(0)rdisk(0)partition(1)WINDOWS= «Windows Server 2003, Enterprise — EMS BOOT»

/fastdetect /redirect

multi(0)disk(0)rdisk(0)partition(1)WINDOWS= «Windows Server 2003, Enterprise» /fastdetect
Рисунок 2. Вид файла Boot.ini после его модификации утилитой Bootcfg

Обратите внимание на то, что в качестве параметра ключа /ID здесь указывается 1. Это связано с тем, что в предыдущем примере мы сделали добавленную запись используемой по умолчанию, соответственно это привело к тому, что теперь в файле boot.ini данная запись переместилась со второй позицию на первую.

Управление процессами

В Windows 2003 и XP для управления процессами предназначены два программных инструмента, Tasklist.exe и Taskkill.exe. В принципе с помощью этих утилит можно выполнить из командной строки все те действия, которые обычно выполняются через графический интерфейс диспетчера задач. Но это далеко не все, поскольку возможности представленных утилит гораздо шире.

Если просто запустить программу Tasklist без параметров, то на экран будет выведен список всех запущенных в системе процессов. Но полностью возможности данной утилиты раскрываются при использовании ее ключей, при этом можно выполнять различные виды поиска и собирать дополнительную информацию о процессах. Допустим, нам нужно увидеть все процессы в системе, которые занимают в памяти более 2 Mбайт. Это можно сделать с помощью запуска Tasklist с ключом /FI, как показано ниже:

C:>Tasklist /FI «MEMUSAGE gt 2048»

В данном примере ключом /FI задается фильтр, использующий для определения критерия фильтрации ключевое слово MEMUSAGE. В Tasklist поддерживаются различные методы выборки и фильтрации процессов. Например, можно производить выбор процессов по таким параметрам, как IMAGENAME, SERVICES или WINDOWTITLE. Выбор процесса по IMAGENAME — это просто выбор процесса по его имени. Если используется ключ /SVC, то в этом случае Tasklist возвращает список имен всех служб Windows, запущенных выбранным процессом. И наоборот, если вы ссылаетесь на службу Windows с помощью ключевого слова SERVICE, то Tasklist покажет, какой именно процесс обрабатывается данной службой. Если, например, выполнить приведенную ниже команду, то можно выяснить, какой процесс работает со службой удаленного управления реестром (remote registry):

C:>Tasklist /FI «SERVICES eq RemoteRegistry»

где RemoteRegistry соответствует тому выводимому имени, под которым данная служба визуально отображается в оснастке Services консоли Microsoft Management Console (MMC).

Для выполнения следующего примера нужно запустить две пустые сессии Notepad. Чтобы отобразить эти процессы, выполнив выборку по заголовку окна (window title), требуется ввести следующую команду:

C:>Tasklist /FI «WINDOWTITLE eq untitled — notepad»

В результате программа Tasklist отобразит две копии процесса Notepad, поскольку оба процесса используют один и тот же заголовок окна. Завершение процесса выполняется с помощью утилиты Taskkill, при этом нужно указать процесс, который требуется завершить. Если для выбора процессов, которые нужно завершить, необходимо применить фильтрацию, то в этом случае, как и для утилиты Tasklist, используется ключ /FI. Соответственно, если мы хотим завершить оба запущенных нами ранее процесса Notepad, мы должны выполнить приведенную ниже команду:

C:>Taskkill /FI «WINDOWTITLE eq untitled — notepad»

Если используется ключ /IM, то при указании всех имен образов процессов допускается применение групповых символов (например, символа « * «) (ключ /IM используется для указания имени образа процесса, который должен быть завершен). Нужно иметь в виду, что применение групповых символов допустимо только в том случае, если в команде определен фильтр (т. е. присутствует ключ /FI). Также обратите внимание на то, что фильтры типа WINDOWTITLE и STATUS нельзя задействовать при работе с удаленными системами — они могут работать только в локальном режиме. Завершение удаленного процесса может быть выполнено только принудительно (для этого существует ключ /F). Для обеспечения вывода результатов в различных форматах в утилитах Tasklist и Taskkill поддерживаются различные методы фильтрации. Полный перечень допустимых ключей по каждой из утилит можно получить, запуская данные утилиты с ключом /?.

Определение свободного дискового пространства

Несколько в стороне от традиционных задач управления журналами событий, конфигурационными файлами и процессами лежат другие, более специфические, но не менее актуальные и часто выполняемые задачи, в частности копирование файлов. В этой ситуации вопросы оценки суммарного объема набора копируемых файлов и проверка наличия достаточного объема свободного пространства на том диске, куда будут копироваться или перемещаться данные, играют ключевую роль, особенно в тех случаях, когда предстоит копировать значительные объемы данных. Если у вас нет желания писать соответствующий сценарий WSH, но тем не менее хочется автоматизировать процедуру проверки, можно воспользоваться интерпретатором Cmd.exe в сочетании с двумя утилитами, реализованными в Windows 2003: Forfiles.exe и Freedisk.exe. Пример сценария, решающего подобную задачу, показан в листинге 1. Здесь команда Forfiles, вызываемая в соответствующей строке после метки A, выглядит следующим образом:

Forfiles.exe /S /M *.DAT /C «Cmd /c echo @fsize»

В результате выполнения этой строки сценария на экран будут выведены данные о размерах всех файлов с расширением *.DAT. Ключ /S указывает на необходимость выполнения поиска файлов во всех подкаталогах текущего каталога, а ключ /M говорит о том, что следует искать файлы с расширением *.DAT. С помощью ключа /C задается команда, которая должна выполняться в случае успешного поиска файла. В рассматриваемом случае выполняется обычный вывод данных о размере найденного файла на экран:

«Cmd /c echo @fsize»

Размещение команды запуска утилиты Forfiles внутри оператора For /f (см. метку A), позволяет вычислить суммарный объем всех файлов, имеющих расширение *.DAT. Вызов утилиты Forfiles в операторе For /f заключен в круглые скобки, поэтому выходные данные, полученные в результате работы Forfiles, записываются в переменную среды %%i. С помощью оператора .MakeTotal %%I осуществляется вызов подпрограммы с именем .MakeTotal, использующей в качестве параметра значение переменной %%i. Данная подпрограмма вычисляет общий объем каждого файла, передаваемого в качестве параметра. Затем суммарный объем файлов вычисляется оператором Set /A Total=%Total% + %1 в основной программе. Переменная %1 — это первый параметр, возвращаемый при вызове подпрограммы .MakeTotal, он представляет собой размер файла, обрабатываемого утилитой Forfiles, а его значение во время вызова подпрограммы записывается в переменную %%i. Оператор цикла For /f вызывает подпрограмму для обработки каждого значения размера файла, возвращаемого командой Forfiles.

По окончании цикла, задаваемого оператором For /f, выполнение программы Freedisk завершается. Для того чтобы определить, достаточного ли на диске свободного пространства, Freedisk использует два параметра: необходимый объем диска и объем диска, на который будут копироваться данные. Из листинга 1 видно, что здесь используется общий объем файлов, вычисленный командой Forfiles, и объем диска C:, что определяется ключом /D. В результате работы программы Freedisk будет выведено сообщение, показывающее, достаточно ли на диске свободного места. В командном файле наличие достаточного дискового пространства определяется значением переменной среды %ERRORLEVEL%: если эта переменная равна 0, то необходимое дисковое пространство имеется, если же значение переменной будет равно 1, то это говорит о том, что имеющегося объема на диске для выполнения операции копирования недостаточно.

Обновленные команды

Появившиеся в системах Windows 2003 и XP новые утилиты командной строки вносят некоторую путаницу в существующий набор команд. Например, для замены известной в предыдущих версиях Windows утилиты AT.exe появилась утилита Schtasks.exe (хотя и в Windows 2003, и в Windows XP утилита AT.exe сохранилась, тем не менее Microsoft рекомендует использовать вместо нее Schtasks). Назначение утилит Schtasks и AT состоит в том, чтобы выполнять по расписанию требуемые задачи, используя для этого механизмы системной службы планировщика задач Task Scheduler. Программа Schtasks функционирует подобно AT, но синтаксис и набор параметров командной строки здесь иной. Разумеется, новая утилита может выполнять все то, что делалось с помощью AT.exe, но при этом ее возможности существенно шире. Для того чтобы пользоваться Schtasks, необходимо входить в группу Administrators на том компьютере, который управляется данной командой. Рассмотрим следующий вариант запуска Schtasks:

SCHTASKS /Create /RU Administrator /RP Password1

/SC MINUTE /ST 09:20 /ET 09:30

/TN «Event Creation»

/TR «C:WINDOWS system32Eventcreate.exe

/S vm75459312b.

LissWare.Net

/L application

/SO ScheduledEventCreation

/T Success

/ID 999

/D ScheduledEventLogCreation»

С помощью ключа /TN создается задание с именем Event Creation. Ключ /SC указывает на то, что это задание будет создаваться ежеминутно (параметр MINUTE), начиная с 09:20 (что определяется ключом /ST) и до 09:30 (в соответствии со значением, указанным в ключе /ET). Ключ /TR определяет, какая команда будет запущена на исполнение, в данном примере это утилита Eventcreate, соответствующие ключи и параметры которой заключены в кавычки. Данная команда запускается в контексте администратора, параметры соответствующей учетной записи задаются ключами /RU и /RP. Аналогичное задание может быть создано и утилитой AT.exe, хотя это не так просто. Чтобы получить более подробные сведения о синтаксисе и допустимых параметрах запуска утилиты Schtasks, следует запустить ее с ключом /?.

Утилита Gpupdate.exe выполняет обновление объектов групповой политики (GPO), подобно тому как это делалось с помощью команды Secedit.exe /Refreshpolicy в Windows 2000. В Windows 2003 и XP утилита Gpupdate.exe заменяет Secedit.exe. Следует отметить, что при выполнении обновления GPO программа Gpupdate может облегчить пользователю жизнь, поскольку для нее не требуются все те параметры командной строки, которые применялись для Secedit.exe. Полный список ключей Gpupdate можно получить, как обычно, с помощью ключа /?.

Вместо существующей утилиты Find.exe в Windows 2003 и XP может использоваться утилита Findstr.exe. Данная команда имеет то же назначение, что и команда Find, обе они выполняют поиск нужной комбинации символов в файлах, размещенных по указанному пути. Однако в Findstr реализованы более широкие возможности поиска и фильтрации, чем те, которыми располагала утилита Find. Программа Findstr может выполнять поиск по указанному списку файлов и допускает использование регулярных выражений для реализации механизмов фильтрации. Регулярное выражение представляет собой текстовую строку специального вида, которая описывает искомую комбинацию символов. Более подробную информацию о регулярных выражениях можно найти по адресу: http://www.regular-expressions.info.

Возьмите команды на вооружение

В данной статье я в общих чертах коснулся тех возможностей утилит командной строки в Windows 2003 и Windows XP, которые могут помочь пользователям сэкономить время и силы. Если требуется более подробная информация по всем программным инструментам и синтаксису командной строки систем Windows 2003 и XP, нужно выполнить команду:

C:>HH.EXE %SystemRoot%HelpNtcmds.chm


Член группы Technology Leadership Group, входящей в состав подразделения HP Consulting and Integration. Автор книг Understanding WMI Scripting и Leveraging WMI Scripting (Digital Press). alain.lissoir@hp.com