Вопрос по лекции 7, где рассматривается взаимодействие со сторонними программами, в том числе эмуляция нажатия кнопок клавиатуры WshShell.SendKeys. Вопрос в том что во время автоматизации может потребоваться не нажатие клавиатуры, а нажатие кнопок в сообщениях этих программ. Можно вытащить информацию о объекте (кнопке) скажем с помощью AutoIt Info, или ориентироваться скажем на текст на кнопке..., но как на эту кнопку нажать? (без обхода по клавиатуре) |
Доступ к WMI из командной строки. Командная оболочка WMIC
Оператор CREATE
Оператор CREATE позволяет создать новый экземпляр класса WMI и задать значения свойств этого экземпляра (новый класс с помощью CREATE создать нельзя). Класс WMI, экземпляр которого должен быть создан, задается с помощью псевдонима WMIC или команды CLASS ; после оператора CREATE указываются пары свойство–значение, которые разделяются запятыми (в качестве разделителя свойства и значения в паре используется знак равенства).
В качестве примера рассмотрим, каким образом оператор CREATE используется для создания новых переменных среды. Всем переменным среды, определенным в системе, соответствуют экземпляры класса Win32_Environment. В свою очередь, этому классу соответствует псевдоним ENVIRONMENT.
Для того чтобы узнать, какие свойства должны быть определены при создании нового экземпляра с помощью псевдонима ENVIRONMENT, нужно вызвать встроенную справку по оператору CREATE для данного псевдонима (команда ENVIRONMENT CREATE /?). В нашем случае нам потребуется задать имя переменной (параметр Name), ее значение (параметр VariableValue ) и имя пользователя (параметр UserName ), которому будет доступна эта переменная. Например, для создания переменной War1 со значением War1905 для пользователя Popov из домена Domain1, нужно выполнить следующую команду:
ENVIRONMENT CREATE Name="War1", VARIABLEVALUE="War1905", UserName="Domain1\Popov"
Если же необходимо создать системную переменную, которая будет доступна всем пользователям, то необходимо в качестве значения параметра UserName указывать <SYSTEM>, например:
ENVIRONMENT CREATE Name="War2", VARIABLEVALUE="War1905", UserName="<SYSTEM>"
Оператор SET
С помощью оператора SET можно изменить значения свойств у одного или нескольких экземпляров класса WMI, которые могут быть заданы с помощью псевдонима WMIC или команды CLASS. Напомним, что изменять значения можно далеко не у всех свойств. Чтобы узнать, какие свойства доступны для изменения у определенного псевдонима, нужно для этого псевдонима вывести встроенную справку по оператору SET. Например, выполнив команду ENVIRONMENT SET /?, можно увидеть, что у псевдонима ENVIRONMENT для изменения доступны только свойства Name и VariableValue.
Для того чтобы с помощью оператора SET изменить значения свойств, нужно, как и в операторе CREATE, указать разделенные запятыми пары вида Cвойство="Значение". Например, чтобы изменить имя системной переменной War2 на War3, а ее значение на War, следует выполнить следующую команду:
ENVIRONMENT WHERE Name="War2" SET Name="War3", VariableValue="War"
Оператор DELETE
Оператор DELETE производит удаление текущего экземпляра класса WMI или целого набора таких экземпляров (также DELETE может использоваться для удаления класса WMI). Например, для удаления созданной нами переменной среды War1 нужно выполнить следующую команду:
ENVIRONMENT WHERE Name="War1" DELETE
Если при этом с помощью глобального параметра /INTERACTIVE был включен интерактивный режим выполнения команд ( /INTERACTIVE:ON ), то перед удалением переменной будет задан дополнительный вопрос. Кроме этого, вне зависимости от значения глобального параметра /INTERACTIVE, дополнительный вопрос об удалении может быть выведен с помощью параметра /INTERACTIVE самого оператора DELETE:
ENVIRONMENT WHERE Name="War2" DELETE /INTERACTIVE
Параметр /NOINTERACTIVE, напротив, позволяет выполнить удаление без дополнительного подтверждения:
ENVIRONMENT WHERE Name="War2" DELETE /NOINTERACTIVE
Оператор GET
Оператор GET позволяет получить значения определенных свойств экземпляров классов WMI, которые могут задаваться с помощью псевдонимов WMIC или команды PATH.
Если же, используя команду CLASS, применить оператор GET к классу WMI, то мы получим описание этого класса. Например, после выполнения команды /OUTPUT:C:\1.htm CLASS Win32_Process GET в файле 1.htm сформируется описание класса Win32_Process.
Для того чтобы вывести на экран несколько свойств экземпляров класса, нужно указать имена этих свойств, разделенные запятыми, после оператора GET. Например: PROCESS GET Name, Handle.
Если ввести оператор GET без указания списка свойств, то будут выведены все свойства псевдонима.
Как уже отмечалось выше, одной из особенностей архитектуры WMIC является то, что XML-формат выходных данных может быть довольно легко изменен с помощью соответствующих таблиц стилей XSL. В операторе GET для этой цели служит параметр /FORMAT, в качестве значения которого указывается либо стандартное или определенное пользователем ключевое слово, задающее формат выходной информации, либо имя XSL-файла, с помощью которого будет происходить обработка выходных XML-данных. Стандартным ключевым словам (значениям параметра /FORMAT ) соответствуют XSL-файлы, которые расположены в каталоге %SystemRoot%\System32\Wbem; данное соответствие устанавливается в файле xsl-mapping.xml, который находится в том же каталоге (листинг 14.1).
<XSLMAPPINGS> <XSLFORMAT KEYWORD="TABLE">WmiCliTableFormat.xsl</XSLFORMAT> <XSLFORMAT KEYWORD="VALUE">WmiCliValueFormat.xsl</XSLFORMAT> <XSLFORMAT KEYWORD="MOF">WmiCliMofFormat.xsl</XSLFORMAT> <XSLFORMAT KEYWORD="LIST">WmiCliValueFormat.xsl</XSLFORMAT> <XSLFORMAT KEYWORD="TVLIST">TextValueList.xsl</XSLFORMAT> </XSLMAPPINGS>Листинг 14.1. Стандартный файл xsl-mapping.xml
В файл xsl-mapping.xml можно добавлять собственные ключевые слова, связывая их со своими XSL-файлами. Стандартные форматы вывода оператора GET описаны в табл. 14.3.
Значение параметра /FORMAT | Описание |
---|---|
CSV | Значения свойств экземпляра класса выводятся в одну строку и отделяются друг от друга запятыми |
HFORM | Информация выводится в виде совокупности HTML-таблиц для каждого из экземпляров класса. В первом столбце этих таблиц записывается имя свойства, а во втором — значение этого свойства |
HTABLE | Информация выводится в виде одной HTML-таблицы, в которой каждая строка соответствует одному экземпляру класса. В заголовках столбцов этой таблицы записываются названия выводимых свойств, а в самих столбцах — значения этих свойств |
LIST | Формат вывода аналогичен случаю GET /VALUE — каждое свойство и его значение выводятся в отдельной строке |
MOF | Выходные данные преобразуются в MOF-формат |
RAWXML | Формируются XML-элементы, содержащие подробную информацию о выполняемой команде и результатах ее обработки |
TABLE | Формат вывода аналогичен случаю GET /ALL — данные выводятся в табличном виде |
VALUE | То же самое, что LIST |
XML | Выходные данные с дополнительной информацией о выполняемой команде преобразуются в XML-формат |
Оператор LIST
Оператор LIST, как и GET, позволяет вывести значения свойств экземпляров классов WMI, которые могут задаваться с помощью псевдонимов WMIC или команды PATH. Этот оператор выполняется для псевдонимов по умолчанию, т. е. если в командной строке WMIC вводится один псевдоним без оператора, то к этому псевдониму применяется оператор LIST.
В отличие от оператора GET, с помощью LIST нельзя вывести данные для произвольных свойств экземпляров класса WMI. В операторе LIST можно лишь выбрать один из имеющихся наборов свойств, которые задаются модификаторами. Общий синтаксис оператора LIST таков:
LIST [<модификатор>] [<параметры>]
Отметим, что наборы модификаторов для различных псевдонимов могут отличаться друг от друга. Однако есть несколько стандартных модификаторов, которые имеются почти у всех псевдонимов (табл. 14.4).
Модификатор | Описание |
---|---|
BRIEF | Выводятся основные свойства псевдонима |
FULL | Выводятся все свойства псевдонима (используется по умолчанию) |
INSTANCE | На экран будут выводиться только пути экземпляров класса (значение свойства __PATH ) |
STATUS | Отображается состояние объектов |
SYSTEM | Выводятся системные свойства псевдонима |
Для того чтобы узнать, какие именно модификаторы доступны для определенного псевдонима, и какие свойства входят в эти модификаторы, нужно воспользоваться встроенной справкой для оператора LIST, например: PROCESS LIST /?
После модификатора в операторе LIST могут указываться параметры /FORMAT и /TRANSLATE, которые имеют тот же смысл, что и в рассмотренном ранее операторе GET.