Командная строка и сценарии Windows

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

Разбить на страницы
Показывать лекцию целиком

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

В Windows XP и Windows Server 2003 к подсистеме WMI можно обращаться непосредственно из командной строки без помощи графических утилит и составления сложных сценариев. Для этого используется программа WMIC (WMI Command-line), которая поддерживает навигацию по информационной схеме WMI локального или удаленного компьютера, позволяя выполнять WQL-запросы к классам и объектам WMI. При этом вместо сложных названий классов WMI используются простые псевдонимы, причем можно создавать собственные псевдонимы, что делает информационную схему WMIC расширяемой.

По умолчанию WMIC поддерживает около 80 псевдонимов, с помощью которых можно выполнить 150 методов и получить значения множества свойств. Важной особенностью WMIC является то, что вывод команд может быть организован в различные форматы: на экран, в текстовый файл, в XML- и HTML-документы, в MOF-файл, в текстовый файл с разделителями или в любой другой формат, определяемый пользователем с помощью таблиц стилей XSL (eXtensible Stylesheet Language).

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

В качестве недостатка WMIC можно отметить отсутствие встроенной полноценной поддержки и обработки событий WMI.

Запуск WMIC. Использование встроенной справки

С WMIC можно работать в двух режимах: интерактивном и пакетном. В интерактивном режиме с клавиатуры вводится последовательность команд WMIC, которые сразу же выполняются. Кроме этого, в интерактивном режиме удобнее работать со встроенной помощью WMIC. Пакетный режим позволяет запускать предварительно подготовленный командный (пакетный) файл с командами WMIC или выполнять из командной строки операционной системы единственную команду WMIC.

Для запуска WMIC в интерактивном режиме необходимо выполнить команду wmic в стандартном интерпретаторе команд cmd.exe или в диалоговом окне Выполнить (Run) в меню Пуск (Start). После этого на экран выводится стандартное приглашение WMIC, wmic:root\cli>.

После этого можно вводить с клавиатуры команды WMIC (регистр символов значения не имеет), которые запускаются после нажатия клавиши <Enter>. Например, если набрать в командной строке WMIC слово PROCESS и нажать <Enter>, то на экран выведется список всех процессов, запущенных в данный момент в системе:

wmic:root\cli>PROCESS
Caption          CommandLine
System Idle Process
System
smss.exe     \SystemRoot\System32\smss.exe
csrss.exe    C:\WINDOWS.1\system32\csrss.exe ObjectDirectory=.\. . .
services.exe  C:\WINDOWS.1\system32\services.exe
lsass.exe     C:\WINDOWS.1\system32\lsass.exe
svchost.exe  C:\WINDOWS.1\system32\svchost -k DcomLaunch
svchost.exe  C:\WINDOWS.1\system32\svchost -k rpcss
svchost.exe  C:\WINDOWS.1\System32\svchost.exe -k netsvcs
. . .

Если же ввести в командной строке WMIC слово OS, то мы увидим на экране свойства операционной системы, установленной на компьютере:

wmic:root\cli>OS
BootDevice               BuildNumber  BuildType          Caption
\Device\HarddiskVolume1  2600         Uniprocessor Free  Microsoft Windows . . .

Естественно, это лишь самые простые примеры использования командной строки WMIC. Для того чтобы узнать о дополнительных возможностях WMIC, можно воспользоваться встроенной помощью, которая вызывается с помощью ключей /? или -?. Например, набрав один из этих ключей после слова PROCESS и нажав клавишу <Enter>, мы выведем справку, из которой, скажем, видно, что команда OS CALL позволяет выполнять некоторые действия над процессами:

wmic:root\cli>OS -?
OS - Управление установленными операционными системами.
СОВЕТ. BNF при работе с псевдонимом.
(<псевдоним> [WMI-объект] | <псевдоним> [<путь where>] | 
 [<псевдоним>] . . .
Использование:
OS ASSOC [<указатель формата>]
OS CALL <имя метода> [<список фактических параметров>]
OS CREATE <список значений>
OS DELETE
OS GET [<список свойств>] [<ключи get>]
OS LIST [<формат списка>] [<ключи>]
OS SET [<список значений>]

Выполнив теперь команду PROCESS CALL /?, мы получим краткое описание методов, которые могут быть вызваны при работе с процессами:

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)

Для получения более подробной помощи по этим методам нужно выполнить команду PROCESS CALL /?:FULL:

wmic:root\cli>PROCESS CALL /?:FULL
Вызов методов.
Использование:
CALL <имя метода> [<список фактических параметров>]
ЗАМЕЧАНИЕ. <список фактических параметров> ::= <факт. парам.> | 
  <факт. парам.>,  <список факти

Для псевдонима доступны следующие команды и методы:
Вызов    [ Ввод/Вывод ]Параметры и тип      Состояние
====     =====================                   ======
AttachDebugger                         (null)

Описание:
The AttachDebugger method launches the currently 
  registered debugger for this . . .

Create  [UNKNOWN]CommandLine(STRING)            (null)
              [UNKNOWN]CurrentDirectory(STRING)
              [UNKNOWN]ProcessStartupInformation(OBJECT)
              [UNKNOWN]ProcessId(UINT32)
Описание:
The Create method creates a new process. 
 It returns an integer value of 0 . . .
. . .

Ключи /? и -? можно ввести и сразу после приглашения WMIC. В этом случае будет выведена общая информация о глобальных ключах, доступных псевдонимах и командах WMIC.

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

Например, для того чтобы вывести в пакетном режиме на экран свойства операционной системы, нужно в командной строке Windows выполнить команду WMIC OS.

Архитектура 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.

(рис 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

    Параметр /RECORD

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

    /RECORD:C:\outwmic.xml

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

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

    Как мы видим, каждой выполненной команде соответствует элемент <RECORD>, который имеет несколько атрибутов (табл. 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-запрос выполняется для создании того или иного псевдонима.

    Стандартные псевдонимы 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

    Оператор 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>

    В файл xsl-mapping.xml можно добавлять собственные ключевые слова, связывая их со своими XSL-файлами. Стандартные форматы вывода оператора GET описаны в табл. 14.3.

    Стандартные форматы вывода оператора GET
    Значение параметра /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).

    Стандартные модификаторы оператора LIST
    Модификатор Описание
    BRIEF Выводятся основные свойства псевдонима
    FULL Выводятся все свойства псевдонима (используется по умолчанию)
    INSTANCE На экран будут выводиться только пути экземпляров класса (значение свойства __PATH )
    STATUS Отображается состояние объектов
    SYSTEM Выводятся системные свойства псевдонима

    Для того чтобы узнать, какие именно модификаторы доступны для определенного псевдонима, и какие свойства входят в эти модификаторы, нужно воспользоваться встроенной справкой для оператора LIST, например: PROCESS LIST /?

    После модификатора в операторе LIST могут указываться параметры /FORMAT и /TRANSLATE, которые имеют тот же смысл, что и в рассмотренном ранее операторе GET.

    Страницы:

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

    В Windows XP и Windows Server 2003 к подсистеме WMI можно обращаться непосредственно из командной строки без помощи графических утилит и составления сложных сценариев. Для этого используется программа WMIC (WMI Command-line), которая поддерживает навигацию по информационной схеме WMI локального или удаленного компьютера, позволяя выполнять WQL-запросы к классам и объектам WMI. При этом вместо сложных названий классов WMI используются простые псевдонимы, причем можно создавать собственные псевдонимы, что делает информационную схему WMIC расширяемой.

    По умолчанию WMIC поддерживает около 80 псевдонимов, с помощью которых можно выполнить 150 методов и получить значения множества свойств. Важной особенностью WMIC является то, что вывод команд может быть организован в различные форматы: на экран, в текстовый файл, в XML- и HTML-документы, в MOF-файл, в текстовый файл с разделителями или в любой другой формат, определяемый пользователем с помощью таблиц стилей XSL (eXtensible Stylesheet Language).

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

    В качестве недостатка WMIC можно отметить отсутствие встроенной полноценной поддержки и обработки событий WMI.

    Запуск WMIC. Использование встроенной справки

    С WMIC можно работать в двух режимах: интерактивном и пакетном. В интерактивном режиме с клавиатуры вводится последовательность команд WMIC, которые сразу же выполняются. Кроме этого, в интерактивном режиме удобнее работать со встроенной помощью WMIC. Пакетный режим позволяет запускать предварительно подготовленный командный (пакетный) файл с командами WMIC или выполнять из командной строки операционной системы единственную команду WMIC.

    Для запуска WMIC в интерактивном режиме необходимо выполнить команду wmic в стандартном интерпретаторе команд cmd.exe или в диалоговом окне Выполнить (Run) в меню Пуск (Start). После этого на экран выводится стандартное приглашение WMIC, wmic:root\cli>.

    После этого можно вводить с клавиатуры команды WMIC (регистр символов значения не имеет), которые запускаются после нажатия клавиши <Enter>. Например, если набрать в командной строке WMIC слово PROCESS и нажать <Enter>, то на экран выведется список всех процессов, запущенных в данный момент в системе:

    wmic:root\cli>PROCESS
    Caption          CommandLine
    System Idle Process
    System
    smss.exe     \SystemRoot\System32\smss.exe
    csrss.exe    C:\WINDOWS.1\system32\csrss.exe ObjectDirectory=.\. . .
    services.exe  C:\WINDOWS.1\system32\services.exe
    lsass.exe     C:\WINDOWS.1\system32\lsass.exe
    svchost.exe  C:\WINDOWS.1\system32\svchost -k DcomLaunch
    svchost.exe  C:\WINDOWS.1\system32\svchost -k rpcss
    svchost.exe  C:\WINDOWS.1\System32\svchost.exe -k netsvcs
    . . .

    Если же ввести в командной строке WMIC слово OS, то мы увидим на экране свойства операционной системы, установленной на компьютере:

    wmic:root\cli>OS
    BootDevice               BuildNumber  BuildType          Caption
    \Device\HarddiskVolume1  2600         Uniprocessor Free  Microsoft Windows . . .

    Естественно, это лишь самые простые примеры использования командной строки WMIC. Для того чтобы узнать о дополнительных возможностях WMIC, можно воспользоваться встроенной помощью, которая вызывается с помощью ключей /? или -?. Например, набрав один из этих ключей после слова PROCESS и нажав клавишу <Enter>, мы выведем справку, из которой, скажем, видно, что команда OS CALL позволяет выполнять некоторые действия над процессами:

    wmic:root\cli>OS -?
    OS - Управление установленными операционными системами.
    СОВЕТ. BNF при работе с псевдонимом.
    (<псевдоним> [WMI-объект] | <псевдоним> [<путь where>] | 
     [<псевдоним>] . . .
    Использование:
    OS ASSOC [<указатель формата>]
    OS CALL <имя метода> [<список фактических параметров>]
    OS CREATE <список значений>
    OS DELETE
    OS GET [<список свойств>] [<ключи get>]
    OS LIST [<формат списка>] [<ключи>]
    OS SET [<список значений>]

    Выполнив теперь команду PROCESS CALL /?, мы получим краткое описание методов, которые могут быть вызваны при работе с процессами:

    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)

    Для получения более подробной помощи по этим методам нужно выполнить команду PROCESS CALL /?:FULL:

    wmic:root\cli>PROCESS CALL /?:FULL
    Вызов методов.
    Использование:
    CALL <имя метода> [<список фактических параметров>]
    ЗАМЕЧАНИЕ. <список фактических параметров> ::= <факт. парам.> | 
      <факт. парам.>,  <список факти
    
    Для псевдонима доступны следующие команды и методы:
    Вызов    [ Ввод/Вывод ]Параметры и тип      Состояние
    ====     =====================                   ======
    AttachDebugger                         (null)
    
    Описание:
    The AttachDebugger method launches the currently 
      registered debugger for this . . .
    
    Create  [UNKNOWN]CommandLine(STRING)            (null)
                  [UNKNOWN]CurrentDirectory(STRING)
                  [UNKNOWN]ProcessStartupInformation(OBJECT)
                  [UNKNOWN]ProcessId(UINT32)
    Описание:
    The Create method creates a new process. 
     It returns an integer value of 0 . . .
    . . .

    Ключи /? и -? можно ввести и сразу после приглашения WMIC. В этом случае будет выведена общая информация о глобальных ключах, доступных псевдонимах и командах WMIC.

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

    Например, для того чтобы вывести в пакетном режиме на экран свойства операционной системы, нужно в командной строке Windows выполнить команду WMIC OS.

    Архитектура 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.

    (рис 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

    Параметр /RECORD

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

    /RECORD:C:\outwmic.xml

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

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

    Как мы видим, каждой выполненной команде соответствует элемент <RECORD>, который имеет несколько атрибутов (табл. 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-запрос выполняется для создании того или иного псевдонима.

    Стандартные псевдонимы 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

    Оператор 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>

    В файл xsl-mapping.xml можно добавлять собственные ключевые слова, связывая их со своими XSL-файлами. Стандартные форматы вывода оператора GET описаны в табл. 14.3.

    Стандартные форматы вывода оператора GET
    Значение параметра /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).

    Стандартные модификаторы оператора LIST
    Модификатор Описание
    BRIEF Выводятся основные свойства псевдонима
    FULL Выводятся все свойства псевдонима (используется по умолчанию)
    INSTANCE На экран будут выводиться только пути экземпляров класса (значение свойства __PATH )
    STATUS Отображается состояние объектов
    SYSTEM Выводятся системные свойства псевдонима

    Для того чтобы узнать, какие именно модификаторы доступны для определенного псевдонима, и какие свойства входят в эти модификаторы, нужно воспользоваться встроенной справкой для оператора LIST, например: PROCESS LIST /?

    После модификатора в операторе LIST могут указываться параметры /FORMAT и /TRANSLATE, которые имеют тот же смысл, что и в рассмотренном ранее операторе GET.

    Вернуться к учебному плану