Практические примеры командных файлов WMIC
Занятие 2. Получение информации о свойствах и состоянии служб Получить доступ к сведениям о зарегистрированных в системе службах можно с помощью псевдонима service. Например, для того чтобы сформировать HTML-таблицу, содержащую информацию о состоянии всех зарегистрированных служб на компьютерах \\Serverl и \\Server2, можно выполнить следующую команду: /NODE:Server1,Server2 /OUTPUT:C:\service.htm SERVICE GET Name, DisplayName, State /FORMAT:HTABLE
Запуск и остановка служб У псевдонима service имеются несколько методов, с помощью которых можно, в частности, запускать и останавливать службы на локальном или удаленном компьютере. Для запуска служб предназначен метод startservice. Например, для того чтобы запустить службы Microsoft SQL Server на сервере \\Serverl, нужно выполнить следующую команду: /NODE:Server1 SERVICE WHERE(Name="MSSQLSERVER") CALL StartService Для остановки этой же службы используется метод stopservice: /NODE:Serverl SERVICE WHERE(Name="MSSQLSERVER") CALL StopService
Создание и завершение процессов Для создания новых процессов используется метод create псевдонима process, в качестве обязательного параметра которого указывается путь к запускаемому исполняемому файлу. Например, следующая команда откроет стандартный Блокнот Windows: PROCESS CALL Create Notepad.exe Отметим, что при таком использовании метода create нужно следить за параметром Returnvalue, ненулевое значение которого служит индикатором ошибки, произошедшей во время выполнения метода. Если же Returnvalue равно нулю, то значит метод create выполнился успешно. Завершить Процесс МОЖНО С ПОМОЩЬЮ Метода Terminate PROCESS WHERE (Name="Notepad.exe") CALL Terminate У метода Terminate также есть выходной параметр Returnvalue, который здесь имеет тот же смысл, что и в методе create.
Мониторинг информации о процессах
С помощью параметров /every и /repeat операторов get и list можно периодически выводить значения свойств какого-либо псевдонима, т. е. производить мониторинг состояния объекта, которому этот псевдоним соответствует. Например, пусть нам требуется постоянно следить за количеством операций записи, которые производят процессы, и за объемом данных, записанных этими процессами. Эти данные хранятся в свойствах WriteOperationCount и WriteTransferCount псевдонима process, поэтому мы можем вывести значения этих свойств с помощью оператора get и добавить параметры /every:10 и /repeat:20, позволяющие автоматически запустить команду 20 раз с интервалом в 10 секунд: PROCESS GET Handle, Name, WriteOperationCount, WriteTransferCount /EVERY:10 /REPEAT:20 Другой пример. Пусть нам нужно видеть информацию об использовании страничной и виртуальной памяти процессом system на компьютере \\Shikin. Для этого можно выполнить следующую команду: /NODE:SHIKIN PROCESS WHERE (Name="System") GET Handle, Name, PageFileUsage, VirtualSize /EVERY:10
Пакетный режим работы WMIC Пакетный режим позволяет автоматизировать работу WMIC — можно создать командный (пакетный) файл Windows, в котором будут вызываться команды WMIC и обрабатываться результаты их выполнения. Естественно, для составления таких пакетных файлов недостаточно только знать нужные команды WMIC, необходимо еще иметь четкое представление о возможностях командного интерпретатора cmd.exe и командных файлов Windows. Надо отметить, что командные файлы Windows XP являются намного более удобным и мощным средством программирования повторяющихся рутинных задач, чем аналогичные файлы в DOS и ранних версиях Windows. Перечислим основные возможности командных файлов в Windows XP. 1. В командах внутри файла можно использовать замещаемые параметры командной строки (%0, %1,..., %9) и переменных среды. При этом над переменными среды и заменяемыми параметрами можно выполнять арифметические действия, а также проводить определенный синтаксический анализ и манипуляции над строками. Изменения переменных среды можно локализовать внутри командного файла или сделать глобальными.
2. С помощью команды echo можно выводить строки текста на экран,-во внешний файл или на принтер. 3. Команда set с ключом /р дает возможность записать в переменную строку, введенную с клавиатуры. 4. С помощью команды goto можно переходить на заданную команду внутри текущего файла или в новой копии текущего пакетного файла (с произвольными параметрами командной строки). Команда goto:Eof осуществляет немедленный переход в конец пакетного файла. 5. В условном операторе if... else реализованы различные типы сравнений с помощью ключевых слов eql (равно), neq (не равно), lss (меньше), leq (меньше или равно), gtr (больше), geq (больше или равно). 6. Имеются несколько видов циклов. В частности, реализованы возможности обработки множества файлов, чтения и обработки строк из текстового файла, а также обработки строк вывода определенной команды. 7. Можно вызывать внешние командные файлы (симуляция подпрограмм).
Практические примеры командных файлов WMIC В качестве первого примера напишем командный файл PartitionsList.bat, который будет формировать в текстовом файле отчет о физических разделах (partitions) жестких дисков локального компьютера и открывать этот файл в редакторе, ассоциированном в операционной системе с текстовыми файлами (по умолчанию это Блокнот Windows). Предположим также, что создаваться текстовый файл должен на диске С, а его имя должно соответствовать шаблону Partition_ДД_MM_ГГГГ.txt, где ДД, ММ и ГГГГ — это текущий день, месяц и год соответственно. Для того чтобы сформировать такое имя файла и сохранить его в переменной FileName, мы воспользуемся командой set в следующем виде: SET FileName=C:\Partition_%DATE:.=_%.txt Выражение %DATE:.=_% здесь определяет следующую операцию: берется значение переменной среды %DATE%, в которой хранится системная дата, и все точки заменяются на символы подчеркивания "_" (мы подразумеваем, что форматом даты в региональных стандартах Windows является ДД ММ.ГГГГ). Теперь можно запустить команду WMIC (нам требуется вывести значения свойств экземпляров псевдонима partition в формате текстовой таблицы): WMIC /OUTPUT:"%FileName%" PARTITION LIST BRIEF /FORMAT:TEXTTABLEWSYS
В конец полученного выходного файла допишем с помощью команды echo и переменных среды %DATE% и %TIME% дату и время формирования отчета: ECHO Отчет создан: %DATE% %TIME% >> %FileName% Теперь осталось только выполнить команду start, которая автоматически запустит приложение, ассоциированное в Windows с текстовыми файлами, и откроет в нем наш выходной файл: START %FileName% Полностью файл PartitionsList.bat представлен в листинге 3.12.
Листинг 3.12. Командный файл PartitionsList.bat @ECHO OFF REM *************************************************************/ REM Имя: PartitionsList.bat */ REM Язык: ВАТ-файл Windows */ REM Описание: Создание с помощью WMIC текстового отчета о */ REM разделах жестких дисков локального компьютера */ REM *************************************************************/ REM Конструируем имя файла в формате С: \Partition_ДД_MM_ГГГГ. txt SET FileName=C:\Partition_%DATE:.=_%.txt REM Запускаем команду WMIC для формирования выходного файла WMIC /OUTPUT:"%FileName%" PARTITION LIST BRIEF /FORMAT:TEXTTABLEWSYS REM Дописываем в выходной файл дату и время создания ECHO Отчет создан: %DATE% %TIME% >> %FileName% REM Открываем выходной файл START %FileName% REM *************** Конец ***************************************/
Во втором примере мы несколько усложним задачу. Напишем командный файл, который в зависимости от значения первого обязательного параметра командной строки (txt или html) будет формировать отчет о логических разделах жестких дисков либо в текстовом (C:\Drives_ДД_ММ_ГГГГT.txt), либо в HTML-файле (C:\Drives_ДД_ММ_ГГГГ.htm) и автоматически открывать полученный файл с помощью соответствующего приложения. В качестве второго необязательного параметра в нашем командном файле можно будет задать либо имя удаленного компьютера, для которого необходимо сделать отчет, либо имя текстового файла со списком таких удаленных компьютеров. Если второй параметр не будет указан, то отчет сформируется для локальной машины. Итак, сначала необходимо проверить, был ли указан в командной строке первый обязательный параметр (формат вывода отчета): IF "%1"=="" GOTO BadParam Если первый параметр не указан, то произойдет переход к метке:BadParam, где мы выводим на экран информацию о синтаксисе запуска командного файла:
:BadParam REM Неправильно заданы параметры, выводим информацию о синтаксисе программы ECHO Вывод информации о логических разделах жестких дисков ECHO Ошибка: Не задан формат вывода (ТХТ или HTML) ECHO. ECHO Синтаксис: DrivesList.bat Формат_вывода [Источник] ECHO Источник - имя одного удаленного компьютера или ECHO текстового файла со списком компьютеров ECHO. ECHO Примеры: ECHO DrivesList.bat TXT - отчет для локальной машины ECHO в текстовом файле ECHO DrivesList.bat HTML - отчет для локальной машины ECHO в HTML-файле ECHO DrivesList.bat HTML Servl - отчет для компьютеров WServl ECHO DrivesList.bat TXT nodes.txt - отчет для компьютеров, имена ECHO которых записаны в файле nodes.txt
Затем мы создадим переменную NodeName, значение которой будет подставлено при запуске команды WMIC в глобальный параметр /NODE: IF "%2"==”” (GOTO LocalHost) IF EXIST %2 (SET NodeName=@%2) ELSE (SET NodeName=%2) GOTO CheckTXT :LocalHost SET NodeName=.
Как мы видим, если второй параметр не был указан, то значением NodeName будет "." (локальный компьютер). Если же второй параметр определяет имя существующего файла, то в NodeName записывается это имя, которому предшествует символ @; в противном случае второй параметр, который должен совпадать с именем удаленного компьютера, записывается в NodeName без изменений. Следующий шаг в командном файле — это проверка значения первого параметра (выходного формата отчета) и в зависимости от него определение переменной outFormat, значение которой (TEXTTABLEWSYS или HTABLE) будет подставлено при запуске команды WMIC в параметр /FORMAT, и переменной Extension, в которой будет записано расширение выходного файла (txt или htm). Для того чтобы при проверке значения первого параметра не учитывать регистр символов, мы используем ключ /I в расширенном синтаксисе команды IF:
:CheckTXT REM Проверяем, задан ли текстовый формат вывода IF /I %1 EQU TXT (SET OutFormat=TEXTTABLEWSYS) ELSE (GOTO CheckHTML) SET Extension=txt GOTO RunWMIC :CheckHTML REM Проверяем, задан ли HTML-формат вывода IF /I %1 EQU HTML (SET OutFormat=HTABLE) ELSE (GOTO BadParam) SET Extension=htm
После этого формируем в переменной FileName имя выходного файла и запускаем команду WMIC:
REM Запускаем команду WMIC для формирования выходного файла :RunWMIC REM Конструируем имя файла в формате С:\Drives_ДД_ММ_ГГГГ.txt REM или С:\Drives_ДД_MM_ГГГГ.htm SET FileName=C:\Drives_%DATE:.=_%..%Extension% WMIC /NODE:"%NodeName%" /OUTPUT:"%FileName%" LOGICALDISK WHERE "Drive-Type=3" LIST BRIEF /FORMAT:%OutFormat%
В случае текстового формата вывода допишем в выходной файл информацию о дате и времени формирования отчета: IF /I %1 EQU TXT (ECHO Отчет создан: %DATE% %TIME% >> %FileName%)
Файл с отчетом мы открываем с помощью команды start, после чего выходим из командного файла:
START %FileName% GOTO:EOF
Полностью файл DrivesList.bat представлен в листинге 3.13.
Листинг 3.13. Командный файл DrivesL.ist.bat @ЕСНО OFF REM ******************************+*******************************/ REM Имя: DrivesList.bat */ REM Язык: ВАТ-файл Windows -7 REM Описание: Создание с помощью WMIC текстового или HTML-отчета */ REM о логических разделах жестких дисков локального */ REM или удаленного компьютера */ REM **********************************************^ REM Проверяем наличие хотя бы одного параметра командной строки IF “%l”==”” GOTO BadParam REM Задаем имя компьютера, на котором будет выполнена команда IF “%2”==”” (GOTO LocalHost) IF EXIST %2 (SET NodeName=@%2) ELSE (SET NodeName=%2) GOTO CheckTXT :LocalHost SET NodeName=. :CheckTXT REM Проверяем, задан ли текстовый формат Вывода IF /I %1 EQU TXT (SET OutFormat=TEXTTABLEWSYS) ELSE (GOTO CheckHTML) SET Extension=txt GOTO RunWMIC :CheckHTML REM Проверяем, задан ли HTML-формат вывода IF /I %1 EQU HTML (SET OutFormat=HTABLE) ELSE (GOTO BadParam) SET Extension=htm :RunWMIC REM Конструируем имя файла в формате С:\Drives_ДД_MM_ГГГГ.txt REM или С:\Drives_ДД_MM_ГГГГ.htm SET FileName=C:\Drives_%DATE:.=_%..%Extension% REM Запускаем команду WMIC для формирования выходного файла WMIC /NODE:"%NodeName%" /OUTPUT:"%FileName%" LOGICALDISK WHERE "Drive- Type=3" LIST BRIEF /FORMAT:%OutFormat% REM В случае текстового формата вывода дописываем в выходной файл REM дату и время создания отчета IF /I %1 EQU TXT (ECHO Отчет создан: %DATE% %TIME% >> %FileName%) REM Открываем выходной файл START %FileName% GOTO:EOF :BadParam REM Неправильно заданы параметры, выводим информацию о синтаксисе программы ECHO Вывод информации о логических разделах жестких дисков ECHO Ошибка: Не задан формат вывода (ТХТ или HTML) ECHO. ECHO Синтаксис: DrivesList.bat Формат_вывода [Источник] ECHO Источник - имя одного удаленного компьютера или ECHO текстового файла со списком компьютеров ECHO. ECHO Примеры: ECHO DrivesList.bat TXT - отчет для локальной машины ECHO в текстовом файле ECHO DrivesList.bat HTML - отчет для локальной машины ECHO в HTML-файле ECHO DrivesList.bat HTML Servl - отчет для компьютеров \\Servl ECHO DrivesList.bat TXT nodes.txt - отчет для компьютеров, имена ECHO которых записаны в файле nodes.txt REM ************* Конец ***********************************************/
Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|