Вопрос по лекции 7, где рассматривается взаимодействие со сторонними программами, в том числе эмуляция нажатия кнопок клавиатуры WshShell.SendKeys. Вопрос в том что во время автоматизации может потребоваться не нажатие клавиатуры, а нажатие кнопок в сообщениях этих программ. Можно вытащить информацию о объекте (кнопке) скажем с помощью AutoIt Info, или ориентироваться скажем на текст на кнопке..., но как на эту кнопку нажать? (без обхода по клавиатуре) |
Доступ к WMI из командной строки. Командная оболочка WMIC
Архитектура WMIC
Главными составными частями WMIC являются псевдонимы (aliases), средство синтаксического анализа и разбора вводимых команд (parser) и средства трансформации выходной информации в нужный формат.
Псевдонимы (aliases) в WMIC — это определения классов WMI, которые упрощают обращение к этим классам и их свойствам. Например, классу Win32_Process соответствует псевдоним PROCESS, а классу Win32_OperatingSystem — псевдоним OS. Таким образом, можно сказать, что псевдонимы выступают в качестве дружественных посредников между объектной моделью WMI и администратором операционной системы.
Стандартные псевдонимы определены для большинства часто используемых классов WMI, в случае необходимости можно создавать собственные псевдонимы или изменять существующие. Хранятся псевдонимы в виде экземпляров класса MSFT_CliAlias из пространства имен Root\Cli.
Пространство имен Root\Cli называется ролью (role) , в нем находятся и другие классы, связанные с WMIC ( MSFT_CliVerb, MSFT_CliFormat, MSFT_CliParam, MSFT_CliProperty, MSFT_CliConnection, MSFT_CliTranslateTable и т. д.). Вообще говоря, WMIC позволяет определить несколько ролей и производить переключение между ними, т. е. в CIM может быть помещено несколько независимых пространств имен, содержащих описания псевдонимов WMIC.
Над псевдонимами можно производить различные операции, которые определяются операторами, вводимыми в командной строке WMIC после имени псевдонима. Обработчик (парсер) для синтаксического разбора, интерпретации и выполнения операций с псевдонимами представлен исполняемым файлом wmic.exe, который находится в каталоге %SystemRoot%\System32\Wbem.
На рис. 14.1 представлена общая схема работы WMIC.
Итак, WMIC функционирует следующим образом. Обработчик wmic.exe получает введенную команду через стандартный входной поток Stdin. Парсер выполняет синтаксический разбор команды, выделяет псевдоним (если таковой имеется) и извлекает определение этого псевдонима для активной роли (напомним, что роли по умолчанию соответствует пространство имен Root\Cli). Кроме псевдонима в командной строке WMIC могут стоять операторы, задающие действие, которое нужно выполнить над псевдонимом. Обработка команды WMIC сводится, в конечном итоге, к выполнению последовательности вызовов соответствующих API-функций WMI в пространстве имен на локальном или удаленном компьютере.
Данные, которые возвращаются WMI в результате выполнения этих API-функций, автоматически преобразуются в формат XML. После этого данные форматируются тем или иным способом в соответствии с таблицей стилей XSL (eXtensible Stylesheet Language), которая связана с псевдонимом по умолчанию или явно задана с помощью соответствующих параметров оператора. Отформатированная информация возвращается пользователю через стандартный выходной поток Stdout.
Структура командной строки WMIC
В данном разделе подробно описаны все элементы командной строки WMIC и приведены примеры команд, которые могут быть полезны администраторам Windows в их повседневной деятельности.
Синтаксис командного языка WMIC
Команды, выполняемые в интерактивном режиме работы WMIC, должны иметь определенную структуру. В командной строке могут присутствовать глобальные параметры, псевдонимы, операторы (verbs) и команды, причем все эти компоненты должны записываться в строго заданном порядке.
Вообще говоря, синтаксис командного языка WMIC может быть представлен в нормальной форме Бэкуса-Наура (Backus-Naur Form, BNF), которая была разработана для описания языка Алгол-60 и затем использовалась для многих других языков программирования. При записи грамматики в форме Бэкуса-Наура используются несколько типов объектов.
- Основные (терминальные) символы. К ним относят, в частности, ключевые слова.
- Металингвистические переменные (нетерминальные символы). Их значениями являются цепочки основных символов описываемого языка. Металингвистические переменные изображаются словами, заключенными в угловые скобки ("<", ">").
- Металингвистические связки изображаются специальными символами ( "::=", "|" ) и используются для определения и связи друг с другом металингвистических переменных.
Мы не будем здесь давать подробных правил построения и анализа формы Бэкуса-Наура, а лишь приведем для иллюстрации простой пример описания правила записи целого числа в этой форме:
<целое> ::= <целое без знака> | +<целое без знака> | -<целое без знака> <целое без знака> ::= <цифра> | <целое без знака> <цифра> <цифра> ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
На практике чаще всего командная строка WMIC строится следующим образом:
[<глобальные параметры>] <псевдоним> [WHERE <оператор WHERE>] [<оператор действия>]
Приведем несколько простых примеров.
Запустим WMIC и введем следующую команду:
SERVICE LIST
Здесь SERVICE является псевдонимом, а LIST — оператором действия, применяемым к этому псевдониму. В результате мы получим список всех служб, зарегистрированных на локальной машине:
wmic:root\cli>SERVICE LIST AcceptPause AcceptStop Caption ystemName TagId WaitHint FALSE FALSE Оповещатель FALSE TRUE Служба шлюза уровня приложения FALSE FALSE Управление приложениями FALSE FALSE ASP.NET State Service . . .
Для того чтобы вывести сведения о конкретной службе (например, о службе оповещения), нужно использовать ключевое слово WHERE, например:
wmic:root\cli>SERVICE WHERE Name="Alerter" LIST AcceptPause AcceptStop Caption CheckPoint CreationClassName . . . FALSE FALSE Оповещатель 0 Win32_Service Посылает . . .
Если необходимо получить информацию о службе оповещения на удаленном компьютере \\Server1, применяется глобальный параметр /NODE:
/NODE:"Server1" SERVICE WHERE Name="Alerter" LIST
Рассмотрим теперь более подробно каждый из компонентов командной строки WMIC.
Команды WMIC
WMIC поддерживает пять стандартных команд: CONTEXT, CLASS, PATH, QUIT и EXIT.
Команда CONTEXT
Команда CONTEXT позволяет увидеть значения всех глобальных параметров, которые используются в среде WMIC по умолчанию. Сами глобальные параметры и их возможные значения будут подробно рассмотрены далее.
Команда CLASS
С помощью команды CLASS можно получить доступ классу WMI напрямую, без использования псевдонима WMIC. Для этого в командной строке WMIC сразу после команды CLASS должен быть указан точный путь к этому классу WMI.
Таким образом, команда CLASS позволяет извлечь определение какого-либо класса WMI или создать его новые экземпляры. Например, для того чтобы увидеть все свойства и методы класса Win32_Process, можно выполнить следующую команду (результат будет выведен на экран в формате HTML):
CLASS Win32_Process
Команда PATH
Команда PATH применяется для прямого доступа к одному или нескольким экземплярам классов WMI, без указания псевдонимов WMIC. Команда PATH особенно полезна, если для нужного класса WMI не существует псевдонима WMIC.
Например, рассмотрим команду, в которой используется псевдоним PROCESS для вывода на экран некоторых сведений о запущенном Проводнике Windows:
PROCESS WHERE (Name="explorer.exe") GET Caption, CommandLine, Handle
Так как псевдоним PROCESS соответствует классу Win32_Process, то эта команда равносильна следующей:
PATH Win32_Process WHERE (Name="explorer.exe") GET Caption, CommandLine, Handle
Отметим также, что отбор конкретных экземпляров класса при использовании команды PATH, может производиться не только с помощью ключевого слова WHERE, но и путем задания полного пути к объекту через значения его ключевых свойств. Например, следующая команда равносильна двум предыдущим:
PATH Win32_Process.Name="explorer.exe" GET Caption, CommandLine, Handle
Команды QUIT и EXIT
Команды QUIT и EXIT позволяют выйти из WMIC и вернуться в предыдущую оболочку (например, к командному приглашению Windows XP).
Глобальные параметры (ключи), настройки WMIC
В среде WMIC определены несколько глобальных параметров (ключей), которые по умолчанию применяются для всех вводимых в командной строке WMIC выражений. Как уже отмечалось ранее, для просмотра глобальных параметров используется команда CONTEXT. Для изменения значений этих параметров используется следующий синтаксис:
/Параметр:Значение
Далее описаны некоторые глобальные параметры WMIC.
Параметр /NODE
В параметр /NODE записываются разделяемые запятыми имена компьютеров, к которым будет обращаться WMIC при поиске классов WMI, соответсвующих вводимым в командной строке псевдонимам. Например:
/NODE:SERVER1,SERVER2
По умолчанию значением параметра /NODE является имя локального компьютера.
Имена компьютеров для параметра /NODE можно также брать из предварительно подготовленного текстового файла. В этом файле имена машин должны быть разделены либо запятыми, либо символами возврата каретки. Например, пусть на диске C имеется текстовый файл nodes.txt следующего содержания:
Server1,Server2 Server3
Тогда после выполнения команды
/NODE:@c:\nodes.txt
значением параметра /NODE станет список из трех имен компьютеров.
Параметр /PRIVILEGES
Напомним, что для выполнения средствами WMI операций, для которых необходимы специальные привилегии в операционных системах Windows NT/2000/XP (например, перезагрузка компьютера), необходимо установить режим использования всех привилегий при работе с WMI. Глобальный параметр /PRIVILEGES отвечает за этот режим при использовании WMIC.
По умолчанию в целях безопасности запрещено использовать все привилегии, значением параметра /PRIVILEGES при этом является DISABLE. Для того чтобы разрешить использовать все привилегии, нужно параметру /PRIVILEGES присвоить значение ENABLE:
/PRIVILEGES:ENABLE