Инструментальные средства управления средой Windows – использование WMI
- Font size: Larger Smaller
- Hits: 6457
- 0 Comments
- Subscribe to this entry
- Bookmark
Инструментальные средства управления средой Windows – использование WMI
Что такое WMI?
Многие сетевые администраторы уже слышали об инструментальных средствах управления средой Windows (WMI, Windows Management Instrumentation). Говоря упрощенно, WMI представляет собой серьезное изменение способа, которым приложения взаимодействуют с операционными системами семейства Windows. В прошлом разработчикам требовалось писать сложный код для того, чтобы выполнить даже простейшие задачи или собрать основную информацию о компьютерах в сети. Это было достаточно трудной задачей даже для наиболее опытных программистов. WMI меняют подобный подход, упрощая его и делая более последовательным.
WMI являются уровнем программного обеспечения, работающего в качестве службы. Их назначение во многом похоже на то, что делает база данных. Серия провайдеров (provider) абстрагирует и представляет операционную систему. Эти провайдеры позволяют разработчикам ссылаться на множество классов. Эти классы представляют такие вещи, как сетевая конфигурация, выполняемые процессы, установленные службы, аппаратное обеспечение и программное обеспечение. Во многих случаях провайдеры предоставляют структуры данных, похожие на таблицы, делая код, взаимодействующий с ними, более простым и легким для написания.
WMI также важны для сетевых администраторов. Эта модель привела к созданию нового поколения утилит командной строки, управляющих приложений и сценариев. Такие команды, как EVENTQUERY, SC и TYPEPERF взаимодействуют с компьютером через WMI. Приложения, подобные Microsoft Operations Manager (MOM) и Systems Management Server (SMS) используют WMI для централизованного выполнения запросов и управления системами. WMI может использоваться даже во взаимодействии с групповой политикой на Windows Server 2003 и Windows XP Professional в качестве дополнительного фильтра при применении объекта групповая политика (GRO, Group Policy Object).
Что такое WMIC
WMI командной строки (WMIC, WMI command-line) является упрощенным интерфейсом командной строки для работы с WMI. Используя WMI, вы можете управлять несколькими компьютерами, работающими под различными версиями Microsoft Windows. WMIC представляет собой неблокирующий интерфейс, что позволяет использовать его в сценариях и пакетных файлах. Вот некоторые из возможностей WMIС:
- Команды, основанные на псевдонимах, ускоряют и упрощают выполнение общих задач.
- Возможна работа с локальным компьютером, удаленным компьютером или набором удаленных компьютеров.
- Выходной формат и псевдонимы могут настраиваться.
- Может использоваться для управления любыми компьютерами, на которых запущены WMI.
Использование WMIC
Перед тем, как начать работать с WMIС, вам необходимо настроить вашу командную строку, чтобы обеспечить лучшее представление получаемых результатов. Некоторые команды WMIС приводят к выводу очень больших результирующих наборов, чтение которых бывает затруднено. Существует две настройки, рекомендуемые мною, находящиеся в окне свойств командной строки. Просто настройте ваше окно командной строки, как показано ниже.
Рисунок 1: Настройка размера шрифта
Рисунок 2: Настройка размера буфера экрана
Используя WMIС, вы должны представлять себе, как работает этот инструмент. WMIМС включает серию «предварительно заготовленных» WMI-запросов, известных как псевдонимы. Вы можете просмотреть содержание любого псевдонима, просто набрав в командной строке «WMIС», а следом имя этого псевдонима. Например, «WMIC QFE» выведет список всех «заплаток» и пакетов обновлений, установленных на компьютере. Полный список всех псевдонимов может быть выведен с помощью набора следующей команды «WMIC /?». Таблица, приведенная ниже, перечисляет некоторые из наиболее часто используемых псевдонимов.
Псевдоним | Используется для получения… |
Computersystem | … информации, находящейся в свойствах системы, таких как имя компьютера, модель и текущий пользователь. |
Csproduct | … информации о компьютере. Содержит универсальный уникальный идентификатор (UUID) компьютера, который может быть использован для таких решений по развертыванию, как служба удаленной установки (RIS). |
Pagefile и Pagefileset | … информации о текущем размере и использовании файла подкачки. |
Memphysical | … информации о емкости памяти компьютера и текущей физической конфигурации оперативной памяти. |
Product | … информации об установленных программных продуктах. |
Sysaccount | … встроенной системной информации об учетной записи пользователя, идентификаторах безопасности (SID) и информации о статусе. |
Process | … детализированной информации о выполняемых процессах. |
Service | … детализированной информации обо всех установленных службах. |
Псевдонимы по умолчанию включаю в себя два формата вывода. Формат по умолчанию заключается в выводе полного перечня всех значений. Также вы можете получить сокращенное представление, содержащее только наиболее значимую информацию, введя в командную строку следующую команду:
WMIC <alias> LIST BRIEF
Стоит заметить, что хотя укороченный список является настраиваемым, его очень трудно изменить. Наиболее практичный подход заключается в создании индивидуального списка только той информации, которая вам нужна, с помощью конструкции GET. Простым примером может служить создание списка конфигурации при запуске для каждой службы на вашем компьютере. Полный список псевдонимов SERVICE включает около 15 столбцов. Из этих 15 для создания отчета о типе запуска всех служб вам необходимы только 4. Вам требуются столбцы CAPTION, NAME и STARTMODE. Вы можете также включить столбец STATE, чтобы сравнить службы, которые уже запущены с теми, которые запущены не были. Этот запрос будет выглядеть следующим образом:
Wmic service get caption, name, startmode, state
Обратите внимание на использование ключевого слова GET для создания списка столбцов. Это будет работать для любого столбца, включенного в псевдоним.
Другой опцией для ограничения выходных данных большой команды WMIC является фильтрация строк возвращаемой информации. В примере, приведенном выше, может потребоваться получение отчета только о тех службах, которые уже запущены. Это может быть достигнуто с помощью включения в этот запрос конструкции WHERE. Конструкция WHERE содержит простое фильтрующее выражение. Вы определяете столбец, который хотите отфильтровать и значение для сравнения. Текстовый значение заключается в кавычки (например “server”), а числовое значение - нет (например < 80). Вот запрос на создание отчета только о запущенных службах:
Wmic service where (state=”running”) get caption, name, startmode, state
Когда конструкции WHERE и GET используются в одном запросе, WHERE всегда идет перед GET.
Другой опцией является перенаправление выходных данных в файл для просмотра. Это достигается с помощью функции командной строки, уже известной со времен операционной системы DOS. Форматом выходных данных по умолчанию является TSV (tab separated values – значения, разделенные табуляцией) формат. Этот формат понимается большинством продуктов баз данных и табличных вычислений. Можно перенаправить отчет о запущенных службах в файл, используя следующую команду:
Wmic service where (state=”running”) get caption, name, startmode, state > output.tsv
Когда этот файл будет открыт в Microsoft Excel, он будет выглядеть следующим образом:
Рисунок 3: TSV-отчет в Microsoft Excel
По ту сторону составления отчетов
WMI имеют возможность идти дальше простого составления отчетов. Используя WMI, можно также управлять компьютерами, работающими под управлением ОС Windows. Существует несколько терминов, которые должны быть усвоены перед тем, как мы продолжим.
Класс (Class) – Класс – это определение чего-либо. Например, класс процесс (process) определяет все характеристики любого процесса, но не ссылается на какой-либо конкретный процесс.
Объект (Object) – Иногда называется экземпляром (instance); объект является определенным проявлением (случаем) класса. В нашем примере он создает новый объект процесс, представляющий собой копию программы notepad, запущенной на вашем компьютере.
Действие (Action) – Разработчиками называется методом (method). Действие – это некоторая операция, которую мы можете попросить выполнить класс или объект. Например, одним из действий, связанных с классом процесс является создание нового процесса. Другим действием – завершение процесса.
Давайте представим, что вы хотите создать экземпляр процесса на вашем компьютере. Первым шагом будет определение информации, необходимой для создания нового экземпляра процесса. Это выполняется с помощью встроенной помощи утилиты WMIC, используя следующую команду:
Wmic process /?
Очевидно, вы заметите, что полученный результат содержит ключевое слово CALL. Это ключевое слово используется для вызова действия. Каждый класс (мы будем работать с классом процесс) будет иметь различный набор действий, которые могут быть вызваны. Некоторые действия будут довольно простыми, такими как create (создать) и terminate (завершить). Вы можете просмотреть список возможных действий, напечатав следующую команду:
Wmic process call /?
В этом списке вы заметите действие create. Вы можете теперь вывести список того, что требуется для создания нового процесса, напечатав:
Wmic process call create /?
Полученный результат будет содержать четыре куска информации. Каждый параметр будет иметь направление ((IN или OUT), имя и тип данных. Как и прежде, для типа данных string заключайте параметр в кавычки, а для numeric – не делайте этого. К счастью не все из этих параметров являются необходимыми.
Наша команда для создания нового экземпляра notepad будет теперь выглядеть следующим образом:
Wmic process call create “c:\windows\notepad.exe”
Теперь Notepad должен быть запущен на вашем компьютере. Это простой пример, но он иллюстрирует силу и простоту WMI. Другим примером может служить завершение процесса notepad. Это достигается с помощью действия terminate класса процесс. Помощь по этому действию можно получить, набрав следующую команду:
Wmic process call terminate /?
Все экземпляры notepad могут быть завершены после ввода следующей команды:
Wmic process where (caption=”notepad.exe”) call terminate
Будьте осторожны, включая какой-либо фильтр при использовании действия terminate. Если вы завершили все процессы, то ваш компьютер будет автоматически перезагружен.
Использование WMIC для управления несколькими компьютерами
Если вы управляете только одним сервером, тогда WMIC предлагает множество способов выполнения простых задач, которые могут быть выполнены быстрее с использованием обычного графического пользовательского интерфейса. Но положение дел меняется, если вам нужно управлять несколькими серверами. Тогда мощность инструмента WMIC становится очевидной.
Прежде всего, давайте посмотрим, как команды WMIC могут быть направлены сразу на несколько серверов. Это достигается с помощью ключа /NODE команды WMIC. Ключ /NODE использует либо список имен компьютеров, либо файл, содержащий список всех компьютеров. Список имен компьютеров в команде WMIC определяется, например, с помощью следующей команды:
Wmic /node:server1,server2 process list brief
Если вы хотите выполнить запрос к нескольким компьютерам, имена которых хранятся в файле, то вам необходимо создать подобный файл. Этот файл может содержать список имен серверов, либо разделенных запятыми, либо напечатанных в отдельных строках. Имя файла должно начинаться с символа @. Следующий пример будет создавать список всех компьютеров леса и сохранит результаты в файле с именем @computers.txt.
dsquery * forestroot -scope subtree -filter objectcategory=computer -attr name –l > @computers.txt
Команда DSQuery включена в Windows Server 2003 и может запрашивать любые объекты в Active Directory. Если вы хотите исследовать только один домен, то просто запустите этот запрос на любом контроллере домена в этом домене. Замените опцию forestroot на domainroot.
Теперь вы можете использовать этот файл для того, чтобы «убить» все экземпляры notepad в вашем лесу:
Wmic /node:@computers.txt process where (caption=”notepad.exe”) call terminate
Еще одно важное замечание заключается в том, что если все компьютеры, перечисленные в этом файле, являются недоступными, то выполнение всей команды провалится. Вы можете обойти это ограничение, запрашивая только те компьютеры, которые доступны. Это достигается с помощью ключа FAILFAST. Когда failfast имеет значение ON, каждый сервер «пингуется» перед тем, как будет запущена команда WMIC. Если сервер не ответит на ping, тогда он пропускается. Обратите внимание, что WMI транспортируются с помощью модели DCOM, использующей протокол RPC. Если брандмауэр препятствует передаче ICMP (ping), тогда сервер не получит эту команду. Также, если сервер разрешает ICMP, но запрещает RPC, тогда выполнение команды также проваливается. Ключ FAILFAST может использоваться следующим способом:
Wmic /fastfail:on /node:@computers.txt process where (caption=”notepad.exe”) call terminate
Дополнительные темы
Пока мы не слишком углубились в функциональные возможности, включенные в WMIC. Имеющиеся в распоряжении псевдонимы представляют основной круг задач и информации, в которой могут быть заинтересованы системные администраторы. Однако это еще не все, что можно сделать, используя WMIC. WMIC могут быть также использованы для прямых запросов к WMI-схеме. Это дает вам доступ ко всем имеющимся классам, а не только к тем, которые предоставляются с помощью псевдонимов.
Полная ссылка на все классы WMI может быть найдена в Microsoft Developer Network по ссылке: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wmisdk/wmi/wmi_start_page.asp.
Классы организованы в то, что принято называть пространствами имен (namespace). Различные пространства имен представляют различные коллекции классов, имеющих общие функции. Пространства имен, содержащие классы, полезные для администраторов – это \root\cimv2. В этом пространстве имен существуют несколько групп классов. Для лучшего понимания того, как соотносятся псевдонимы и классы, введите следующую команду:
Wmic alias list brief
Крайний справа столбец содержит оператор, известный как запрос. Этот запрос написан на языке WMI Query Language (WQL). Этот язык очень похож на SQL. Вы можете напрямую запрашивать какой-либо из классов, используя следующую команду:
Wmic /namespace:\\root\cimv2 class Win32_Service
Результатом выполнения этой команды будет XML-документ, содержащий описание всех свойств класса Win32_Service, но не действительную информацию о сервере. Для того чтобы просмотреть действительную информацию о сервере, вы должны запросить экземпляр Win32_Service, а не сам класс Win32_Service. Это может быть выполнено с помощью замены ключевого слова CLASS на ключевое слово PATH . Вот пример подобной команды:
Wmic /namespace:\\root\cimv2 path Win32_Service
WMIC поддерживает и фильтрацию и действия при прямых запросах WMI-схемы.
Исчерпывающую помощь по WMIC можно найти также в справочных системах Windows XP Professional и Windows Server 2003, а также в центрах поддержки.