Опубликован: 12.01.2008 | Уровень: специалист | Доступ: платный | ВУЗ: Мордовский государственный университет имени Н.П. Огарева
Лекция 14:

Доступ к WMI из командной строки. Командная оболочка WMIC

< Лекция 13 || Лекция 14: 1234 || Лекция 15 >
Параметр /RECORD

С помощью параметра /RECORD можно сохранять во внешнем XML-файле историю запускаемых в текущей сессии WMIC команд и результаты их выполнения. Для включения режима записи команд нужно указать в качестве значения параметра /RECORD имя выходного XML-файла, например:

/RECORD:C:\outwmic.xml

Выполним теперь пару команд WMIC (например, CONTEXT и CPU LIST BRIEF ) и посмотрим в браузере Internet Explorer на содержимое выходного файла outwmic.xml (рис. 14.2).

Содержимое выходного XML-файла при включенном режиме записи команд

увеличить изображение
Рис. 14.2. Содержимое выходного XML-файла при включенном режиме записи команд

Как мы видим, каждой выполненной команде соответствует элемент <RECORD>, который имеет несколько атрибутов (табл. 14.1).

Таблица 14.1. Атрибуты элемента <RECORD>
Атрибут Описание
SEQUENCENUM Порядковый номер выполняемой команды в сеансе WMIC
ISSUEDFROM Имя компьютера, на котором запускалась команда
STARTTIME Дата и время запуска команды

Внутри каждого из элементов <RECORD> находятся элементы <REQUEST> и <OUTPUT>, в которых хранятся соответственно данные о самой команде и о результате ее выполнения (рис. 14.3).

Данные о запущенной команде и результате ее выполнения

увеличить изображение
Рис. 14.3. Данные о запущенной команде и результате ее выполнения

Внутри тегов <COMMANDLINE> и </COMMANDLINE> записан текст команды (в нашем случае это CONTEXT и CPU LIST BRIEF ).

У элемента <OUTPUT> имеются атрибуты TARGETNODE, значением которого является имя компьютера, на котором осуществлялся вывод информации, полученной в результате выполнения команды, и ITERATION, куда записывается номер итерации команды. Сами выходные данные команды помещаются внутрь секции <![CDATA[, которая, в свою очередь, находится внутри элемента <OUTPUT>.

Таким образом, глобальный параметр /RECORD позволяет создавать очень удобный журнал, в котором фиксируются все команды, выполняющиеся в среде WMIC. Если же необходимо прекратить запись в этот журнал, то следует в качестве значения параметра /RECORD указать пустую строку: /RECORD:"".

Параметры /OUTPUT и /APPEND

Как уже отмечалось при описании архитектуры WMIC, по умолчанию все команды выводят информацию в стандартный выходной поток StdOut, т. е. на экран. Параметр /OUTPUT позволяет перенаправить вывод команд во внешний текстовый файл ( /OUTPUT:имя_файла ) или в буфер Windows ( /OUTPUT:CLIPBOARD ).

Отметим, что в отличие от параметра /RECORD, при перенаправлении вывода во внешний файл с помощью /OUTPUT в этот файл будет добавляться только результат выполнения команд, сами же команды записываться не будут. После перенаправления вывода в текстовый файл или буфер Windows на экран выходные данные команд выводиться не будут.

Часто бывает удобнее дублировать вывод на экран и в текстовый файл или буфер Windows. Для этого используется параметр /APPEND, в качестве значения которого указывается имя внешнего текстового файла (например, /APPEND:C:\OUT.TXT ), в который будет дублироваться выводимая командами информация (значением параметра /OUTPUT при этом должно быть STDOUT ).

Параметры /USER и /PASSWORD

Параметры /USER и /PASSWORD позволяют задать соответственно имя пользователя и пароль, которые будут использоваться во время доступа к компьютерам, имена которых заданы переключателем /NODE или указаны в псевдонимах. Имя пользователя здесь указывается в формате Домен\Пользователь. Например, для того чтобы получить доступ к подсистеме WMI на компьютере \\Server1 от имени пользователя Popov, зарегистрированного в домене Domain1, следует в командной строке WMIC ввести следующие переключатели:

/NODE:Server1 /USER:Popov /PASSWORD:"ser+-1"

Здесь мы явно указываем пароль, который содержит специальные символы ( "+" и "–" ), поэтому этот пароль заключен в двойные кавычки. Если не указывать параметр /PASSWORD, а только задать значение параметра /USER, то пароль будет запрошен с клавиатуры, причем вводится он с помощью неотображаемых символов.

Псевдонимы WMIC

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

Псевдонимы имеются для большинства часто используемых классов WMI. Для того чтобы просмотреть список имеющихся псевдонимов, нужно вызвать в командной строке WMIC встроенную справку путем ввода команды /?. Для вывода информации о конкретном псевдониме, нужно вызвать встроенную справку по этому псевдониму. Например: PROCESS /?

В табл. 14.2 приведено краткое описание некоторых стандартных объектов WMIC и показано, какой WQL-запрос выполняется для создании того или иного псевдонима.

Таблица 14.2. Стандартные псевдонимы WMIC
Псевдоним Описание WQL-запрос для построения псевдонима
ALIAS Доступ к псевдонимам, зарегистрированным на локальном компьютере SELECT * FROM Msft_CliAlias
BIOS Управление базовой системой ввода-вывода (BIOS) SELECT * FROM Win32_BIOS
CPU Управление ЦП SELECT * FROM WIN32_PROCESSOR
DESKTOP Управление рабочим столом SELECT * FROM WIN32_DESKTOP
DISKDRIVE Управление физическими дисками SELECT * FROM Win32_DiskDrive
ENVIRONMENT Управление настройками системной среды SELECT * FROM Win32_Environment
LOGICALDISK Управление локальными накопителями SELECT * FROM Win32_LogicalDisk
OS Управление установленными операционными системами SELECT * FROM Win32_OperatingSystem
PROCESS Управление процессам SELECT * FROM Win32_Process
SERVICE Управление служебными приложениями SELECT * FROM Win32_Service
STARTUP Управление командами, запускающимися автоматически при входе пользователей в систему SELECT * FROM Win32_StartupCommand

Если в командной строке WMIC ввести имя псевдонима и нажать клавишу <Enter>, то будет выполнен WQL-запрос из табл. 14.2, который используется при создании этого псевдонима, т. е. будут выведены свойства всех экземпляров некоторого класса. Если же нам нужны сведения лишь о некоторых экземплярах этого класса, то следует применять условие WHERE, которое ставится сразу после имени псевдонима и должно содержать допустимое WQL-выражение. Например:

PROCESS WHERE (Name="notepad.exe")

Здесь будет выведена информация о процессах с именем notepad.exe (Блокнот Windows).

После имени псевдонима и условия WHERE может указываться оператор WMIC (например, GET, LIST или SET ), который задает действие, выполняемое над псевдонимом (описание операторов WMIC и соответствующие примеры их использования приведены далее).

Кроме этого, в псевдонимах определяются выходные форматы, которые могут включать значения свойств или предоставлять необходимые шаблоны для оформления данных. Например, в формате BRIEF перечисляются только значения свойств, существенных для идентификации объекта, доступ к которому осуществляется через этот псевдоним. Имена таких форматов вывода указываются в командной строке WMIC после оператора LIST, с помощью которого выводятся значения свойств псевдонима, указанных в данном формате. Например: PROCESS LIST BRIEF. Имена форматов вывода называются модификаторами оператора LIST.

Операторы (действия) WMIC

В этом разделе будут описаны некоторые стандартные операторы (действия) CALL, CREATE, SET, DELETE, GET и LIST, которые поддерживаются большинством псевдонимов WMIC. Псевдонимы могут также поддерживать другие действия. Чтобы получить сведения об операторах, доступных для некоторого псевдонима, нужно вывести встроенную справку для этого псевдонима, т. е. выполнить команду вида <псевдоним> /?.

Оператор CALL

С помощью оператора CALL можно выполнить метод класса или экземпляра класса WMI (путь к этому классу или экземпляру может быть задан либо с помощью псевдонима WMIC, либо с помощью команд CLASS и PATH ).

Для того чтобы узнать, какие методы доступны в псевдониме, а также какие параметры должны указываться при вызове определенного метода, нужно воспользоваться встроенной справкой WMIC.

Рассмотрим этот процесс более подробно. Предположим, что нам нужно запустить из среды WMIC стандартный калькулятор Windows (calc.exe). Так как для этого необходимо создать новый процесс, то сначала мы посмотрим, какие методы можно вызвать с помощью псевдонима PROCESS (или с помощью класса Win32_Process ). Для этого в командной строке WMIC введем одно из следующих выражений:

PROCESS CALL /?
CLASS Win32_Process CALL /?

В результате на экран выведется список доступных методов с описанием входных (IN) и выходных (OUT) параметров для каждого метода:

wmic:root\cli>PROCESS CALL /?
Вызов методов.
Использование:
CALL <имя метода> [<список фактических параметров>]
ЗАМЕЧАНИЕ. <список фактических параметров> ::= <факт. парам.> | 
  <факт. парам.>,. . .
Для псевдонима доступны следующие команды и методы:
Вызов     [ Ввод/Вывод ]Параметры и тип             Состояние
====      =====================                   ======
AttachDebugger                                   (null)
Create    [UNKNOWN]CommandLine(STRING)            (null)
          [UNKNOWN]CurrentDirectory(STRING)
          [UNKNOWN]ProcessStartupInformation(OBJECT)
          [UNKNOWN]ProcessId(UINT32)
GetOwner  [UNKNOWN]Domain(STRING)                 (null)
          [UNKNOWN]User(STRING)
GetOwnerSid [UNKNOWN]Sid(STRING)                    (null)
SetPriority [IN ]Priority(SINT32)                   (null)
Terminate [UNKNOWN]Reason(UINT32)                 (null)

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

При необходимости для каждого метода можно вывести его краткое описание. Для этого нужно использовать полный формат помощи: PROCESS CALL /?:FULL

Итак, мы видим, что новый процесс создается с помощью метода Create. Обязательным параметром CommandLine при этом является командная строка, содержащая путь к запускаемому исполняемому файлу (если в методе необходимо указывать несколько параметров, то эти параметры разделяются запятыми.). В нашем случае необходимо выполнить следующую команду:

PROCESS CALL Create calc.exe

В результате запустится калькулятор Windows и на экран выведутся выходные параметры метода Create (идентификатор ProcessID нового процесса и код возврата ReturnValue, нулевое значение которого говорит об успешном выполнении метода).

Для того чтобы закрыть запущенный калькулятор, нужно вызвать метод Terminate:

PROCESS WHERE Name="calc.exe" CALL Terminate
< Лекция 13 || Лекция 14: 1234 || Лекция 15 >
Валентина Тюрина
Валентина Тюрина

Вопрос по лекции 7, где рассматривается взаимодействие со сторонними программами, в том числе эмуляция нажатия кнопок клавиатуры WshShell.SendKeys.

Вопрос в том что во время автоматизации может потребоваться не нажатие клавиатуры, а нажатие кнопок в сообщениях этих программ.

Можно вытащить информацию о объекте (кнопке) скажем с помощью AutoIt Info, или ориентироваться скажем на текст на кнопке..., но как на эту кнопку нажать? (без обхода по клавиатуре)

Александр Тагильцев
Александр Тагильцев

Где проводится профессиональная переподготовка "Системное администрирование Windows"? Что-то я не совсем понял как проводится обучение.

Михаил Байков
Михаил Байков
Россия, Москва, Московский Авиационный Институт, 2009
Алексей Хохлов
Алексей Хохлов
Россия, Балашиха