Настройка WMI

Если вы не боитесь таких слов, как сервер сценариев Windows (WSH) или инструментарий управления Windows (WMI), тогда вам, возможно, будет интересно узнать о новых классах, свойствах и методах, которые появились в репозитарии CIM операционной системы Windows Vista. Именно поэтому новые классы (а также некоторые из старых) были описаны на протяжении всей этой книги.

Ниже в данном материале будут описаны способы работы с репозитарием CIM. Однако перед тем как начать описание работы с репозитарием, давайте рассмотрим настройки WMI и способы их просмотра.

Использование репозитария CIM

Одним из способов просмотра сведений о настройках WMI является использование класса Win32_WMISetting, принадлежащего пространству имен \\root\cimv2. Данный класс поддерживает следующие свойства, большинство из которых доступно как для чтения, так и для записи.

ASPScriptDefaultNamespace Определяет пространство имен, которое подразумевается по умолчанию при получении доступа к репозитарию CIM из сценариев, если пространство имен в сценарии не указано. По умолчанию данное свойство содержит в себе значение root\cimv2.

Данному свойству соответствует параметр реестра строкового типа Default Namespace.

ASPScriptEnabled Определяет, разрешено ли использование возможностей WMI в сценариях на страницах ASP.

Данному свойству соответствует параметр реестра типа REG_DWORD Enable for ASP.

AutorecoverMofs Определяет список mof-файлов, которые загружены в репозитарий CIM. Также mof-файлы, описанные в данном свойстве, используются при восстановлении репозитария CIM.

Данному свойству соответствует параметр реестра типа REG_MULTI_SZ Autorecover MOFs.

BackupInterval Определяет интервал создания резервной копии репозитария CIM.

Данному свойству соответствует параметр реестра строкового типа Backup Interval Threshold.

BackupLastTime Определяет дату создания резервной копии репозитария CIM.

BuildVersion Определяет номер версии WMI, установленной в операционной системе. Например, в Windows Vista используется WMI версии 6000.16386, а в Windows XP — версии 2600.0000.

Данному свойству соответствует параметр реестра строкового типа Build.

DatabaseDirectory Определяет путь к репозитарию CIM.

Данному свойству соответствует параметр реестра строкового типа Repository Directory.

DatabaseMaxSize Определяет максимальный размер репозитария CIM.

Данному свойству соответствует параметр реестра типа REG_DWORD Max DB Size.

EnableEvents Определяет, разрешена ли подсистема событий WMI.

Данному свойству соответствует параметр реестра строкового типа EnableEvents.

EnableStartupHeapPreallocation Определяет, будет ли куча (часть оперативной памяти, используемая для хранения объектов) выделяться сразу при запуске службы WMI.

Данному свойству соответствует параметр реестра типа REG_DWORD EnableStartupHeapPreallocation.

HighThresholdOnClientObjects Определяет верхнее пороговое значение очереди объектов от поставщиков. Достижение данного порогового значения приводит к прекращению приема объектов от поставщиков и возвращению поставщикам кода WBEM_E_OUT_OF_MEMORY.

Данному свойству соответствует параметр реестра типа REG_DWORD High Threshold On Client Objects (b).

HighThresholdOnEvents Определяет верхнее пороговое значение очереди событий от поставщиков. Достижение данного порогового значения приводит к прекращению приема событий от поставщиков и возвращению поставщикам кода WBEM_E_OUT_OF_MEMORY.

Данному свойству соответствует параметр реестра типа REG_DWORD High Threshold On Events (b).

InstallationDirectory Определяет путь к каталогу, содержащему файлы WMI. Данный каталог содержит файлы службы WMI, mof-файлы, лог-файлы, репозитарий CIM и основные программы командной строки, предназначенные для работы с репозитарием CIM.

Данному свойству соответствует параметр реестра строкового типа Installation Directory.

LastStartupHeapPreallocation Определяет размер выделяемой кучи, если свойство EnableStartupHeapPreallocation равно TRUE.

LoggingDirectory Определяет путь к каталогу, содержащему лог-файлы WMI.

Данному свойству соответствует параметр реестра строкового типа Logging Directory.

LoggingLevel Определяет уровень протоколирования ошибок, который может принимать следующие значения 0 (отключить протоколирование), 1 (краткое протоколирование ошибок), 2 (полное протоколирование ошибок).

Данному свойству соответствует параметр реестра строкового типа Logging.

LowThresholdOnClientObjects Определяет нижнее пороговое значение очереди объектов от поставщиков, по достижении которого скорость создания объектов замедлится.

Данному свойству соответствует параметр реестра типа REG_DWORD Low Threshold On Client Objects (b).

LowThresholdOnEvents Определяет нижнее пороговое значение очереди событий от поставщиков, по достижении которого скорость создания объектов замедлится.

Данному свойству соответствует параметр реестра типа REG_DWORD Low Threshold On Events (b).

MaxLogFileSize Определяет максимальный размер журналов WMI.

Данному свойству соответствует параметр реестра строкового типа Log File Max Size.

MaxWaitOnClientObjects Определяет время в миллисекундах, в течение которого объект может находиться в очереди.

Данному свойству соответствует параметр реестра строкового типа Max Wait On Client Objects (ms).

MaxWaitOnEvents Определяет время в миллисекундах, в течение которого событие может находиться в очереди.

Данному свойству соответствует параметр реестра строкового типа Max Wait On Events (ms).

MofSelfInstallDirectory Определяет путь к каталогу, в который будут помещаться mof-файлы, предназначенные для автоматического добавления новых поставщиков WMI, свойств и методов.

Данному свойству соответствует параметр реестра строкового типа MOF Self-Install Directory.

Использование реестра

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

Настройки репозитария Параметры реестра BUILD, Installation Directory и MOF Self-Install Directory содержатся в ветви HKLM\SOFTWARE\Microsoft\WBEM.

Настройки сценариев Параметры реестра Default Namespace, Enable for ASP и MOF Self-Install Directory содержатся в ветви HKLM\SOFTWARE\Microsoft\WBEM\Scripting.

Также в данной ветви реестра может находиться параметр REG_DWORD типа Default Impersonation Level. Данный параметр определяет используемый по умолчанию (если уровень не указан в сценарии) уровень заимствования прав доступа. По умолчанию значение данного параметра равно 3.

Настройки WMI Остальные параметры реестра содержатся в ветви HKLM\SOFTWARE\Microsoft\WBEM\CIMOM.

Кроме параметров, данная ветвь реестра содержит в себе вложенный подраздел CIMOM, содержащий в себе сведения о CIM-совместимой базе данных WMI. Данный подраздел содержит в себе следующие параметры.

  • DefaultRPCStackSize. Данный параметр имеет строковый тип. Он определяет используемый по умолчанию размер буфера для хранения запросов RPC.
  • EnablePrivateObjectHeap. Данный параметр имеет тип REG_DWORD. Он определяет, будет ли использоваться куча для хранения объектов от поставщиков.
  • EnableObjectValidation. Данный параметр имеет тип REG_DWORD. Если его значение равно 1, тогда проверка целостности объектов от поставщиков будет выполняться.
  • Sink Transmit Buffer Size. Данный параметр имеет строковый тип. Он определяет размер буфера, используемого при передаче ответа на асинхронный запрос.

Настройки WMI в реестре

Рассмотрим настройки WMI, доступ к которым предоставляет реестр Windows XP. Все эти настройки содержатся в ветви HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WBEM в следующих параметрах строкового типа.

  •  Build — определяет номер версии WMI, установленной в системе. По умолчанию в Windows XP используется версия 2600.0000.
  •  Installation Directory — указывает путь к каталогу, хранящему файлы WMI. В этом каталоге расположены все библиотеки, необходимые для работы WMI, файлы журналов и многое другое.
  •  MOF Self-Install Directory — определяет путь к каталогу, в который будут помещаться файлы с расширением MOF, предназначенные для автоматического добавления новых поставщиков WMI, а также функций и методов.

Кроме параметров, данная ветвь реестра включает в себя вложенный раздел CIMOM, содержащий сведения о CIM-совместимой базе данных WMI. Этот раздел хранит следующие параметры.

  •  Autorecover MOFs —данный параметр REG_MULTI_SZ-типа включает в себя список всех файлов с расширением MOF, используемых при инициализации и восстановлении базы данных WMI. Содержимое этого файла также определяет порядок, в котором компилировались файлы MOF при установке WMI.
  •  Backup Interval Threshold — параметр строкового типа, определяет промежуток времени в минутах, по истечении которого будет выполняться резервное копирование базы данных WMI. По умолчанию в реестре не существует.
  •  EnableEvents — этот параметр строкового типа определяет, будет ли использоваться подсистема событий WMI. Если значение равно 1, то будет. Как правило, значение параметра равно 0.
  •  EnableStartupHeapPreallocation — параметр DWORD-типа, определяет, будет ли сразу же при запуске WMI выделяться куча (часть оперативной памяти, используемая для хранения объектов). Если значение равно 1, то при запуске WMI будет заранее выделяться куча, размер которой определен в параметре LastStartupHeapPreallocation. По умолчанию эти параметры не существуют.
  •  EnablePrivateObjectHeap — этот параметр DWORD-типа определяет, будет ли использоваться куча для хранения объектов от поставщиков. По умолчанию не существует.
  •  EnableObjectValidation — если значение этого параметра DWORD-типа будет равно 1, то проверка целостности объектов от поставщиков будет выполняться. По умолчанию в реестре не существует.
  •  High Threshold On Client Objects (B) — этот параметр DWORD-типа определяет верхнее пороговое значение очереди объектов от поставщиков, достижение которого приводит к прекращению приема объектов от поставщиков (в этом случае WMI возвращает поставщикам код WBEM_E_OUT_OF_MEMORY). По умолчанию параметр не существует.
  •  High Threshold On Events (B) — значение этого параметра DWORD-типа аналогично значению предыдущего, но в этом случае определяется верхнее пороговое значение очереди событий (а не объектов) от поставщиков.
  •  Log File Max Size — определяет максимальный размер файлов журналов, создаваемых службами WMI.
  •  Logging — этот параметр строкового типа определяет уровень протоколирования ошибок и может принимать следующие значения:
  •  • 0 — отключить протоколирование;
  •  • 1 — краткое протоколирование ошибок;
  •  • 2 — полное протоколирование ошибок.
  •  Logging Directory — этот параметр строкового типа содержит путь к каталогу, в котором находятся файлы системных журналов WMI. Именно значение этого параметра и редактируется на вкладке Ведение журнала.
  •  Low Threshold On Client Objects (B) — параметр DWORD-типа, определяет нижнее пороговое значение очереди объектов от поставщиков, достижение которого приводит к замедлению скорости создания объектов. По умолчанию в реестре не существует.
  •  Low Threshold On Events (B) — этот параметр DWORD-типа определяет нижнее пороговое значение очереди событий от поставщиков, достижение которого приводит к замедлению скорости создания событий.
  •  Max DB Size — параметр строкового типа, определяет максимальный размер базы данных WMI. По умолчанию не существует.
  •  Max Wait On Events (ms) — этот параметр строкового типа указывает время в миллисекундах, в течение которого событие может находиться в очереди. Если по истечении этого времени событие все еще находится в очереди, то оно будет автоматически удалено.
  •  Max Wait On Client Objects (ms) — параметр строкового типа, указывает время в миллисекундах, в течение которого объект может находиться в очереди. Если по истечении этого времени объект все еще находится в очереди, то он будет автоматически удален. По умолчанию в реестре не существует.
  •  Repository Directory — этот параметр строкового типа определяет путь к каталогу, используемому службой WMI для хранения архивов СIМ-совместимой базы данных. Они используются при восстановлении базы данных.
  •  Working Directory — параметр строкового типа, определяет путь к рабочему каталогу WMI. По умолчанию используется путь %systemroot%\system32\wbem.

В реестре также существует ветвь HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WBEM\Scripting. Значения данной ветви определяют настройки взаимодействия WMI и сервера сценариев Windows. Например, ветвь может содержать следующие параметры.

  •  Default Namespace — этот параметр строкового типа определяет пространство имен, используемое по умолчанию (если пространство имен не указано явно). Чаще всего значение равно root\cimv2.
  •  Enable for ASP — если значение данного параметра DWORD-типа равно 1, то будет разрешено использование сценариев WMI для ASP.
  •  Default Impersonation Level — этот параметр DWORD-типа определяет используемый по умолчанию (если уровень не указан в сценарии) уровень прав безопасности. По умолчанию значение равно 3.

Использование программы winmgmt.exe

Программа winmgmt.exe, которая расположена в каталоге %systemroot%\system32\wbem, является службой инструментария управления Windows (WMI). При этом она поддерживает набор опций, при помощи которых можно управлять работой репозитария CIM и WMI в целом.

Перед тем, как описать способы работы с репозитарием CIM при помощи сервера сценариев Windows, давайте рассмотрим несколько простых способов работы с инструментарием управления Windows, чтобы вы смогли вспомнить, что это такое, и с чем его едят.

Программа WMIC

В стандартную поставку операционной системы Windows Vista входит программа командной строки wmic.exe, расположенная в каталоге %systemroot%\SYSTEM32\wbem. С ее помощью можно получить доступ к репозитарию CIM, даже не зная основ работы с инструментарием управления Windows.

Опции программы

При первом запуске программы выполняется ее установка в системе, после чего будет выведена командная строка wmic. Программа wmic.exe поддерживает множество опций, но мы рассмотрим лишь некоторые из них. Весь же список команд можно просмотреть при помощи команды wmic /?.

  • /NAMESPACE:«пространство имен». Определяет пространство имен, в котором будет выполнен поиск псевдонима.
  • /NODE:«компьютер». Определяет компьютер, к репозитарию которого будет отправлен запрос WQL.
  • /USER:«пользователь». Определяет пользователя, от имени которого будет выполнен запрос. Если вы выполняете запрос на локальном компьютере, тогда указывать пользователя нельзя (можно выполнять запрос только от текущего пользователя).
  • /PASSWORD:«пароль». Определяет пароль для учетной записи пользователя, от имени которого будет выполняться запрос к репозитарию.
  • /ROLE:«пространство имен». Определяет пространство имен, содержащее в себе описание доступных псевдонимов. По умолчанию значение данной опции равно \\root\cli.
  • /LOCALE:«язык». Определяет идентификатор языка, к пространству имен которого будет выполнен запрос.
  • CONTEXT. Данная опция указывается без косой черты (и без псевдонима). Она отображает список значений всех опций, используемых в программе wmic.exe.

Доступные в программе псевдонимы

Кроме опций программа wmic.exe также поддерживает набор псевдонимов (ключевые слова, ассоциированные с конкретным запросом WQL). Список доступных программе псевдонимов можно также просмотреть при помощи команды wmic.exe /?. Наиболее интересные из них описаны ниже.

  • BASEBOARD. Возвращает сведения о материнской плате, установленной на компьютере: модель, производителя, описание. Эти сведения хранятся в классе Win32_BaseBoard.
  • BIOS. Возвращает сведения о версии BIOS материнской платы: основную и дополнительную версию, производителя, название, язык, описание, дату установки, является ли данная версия BIOS основной. Эти сведения хранятся в классе Win32_BIOS.
  • BOOTCONFIG. Возвращает сведения о настройках загрузочного меню компьютера.
  • COMPUTERSYSTEM. Возвращает сведения об операционной системе компьютера. Эти сведения хранятся в классе Win32_ComputerSystem репозитария CIM.
  • GROUP. Возвращает сведения о группах учетных записей, зарегистрированных в системе: SID, присвоенный группе, название группы, ее описание. Эти сведения хранятся в классе Win32_Group.
  • LOGICALDISK. Возвращает сведения о логических дисках компьютера: метке диска, букве, серийном номере, описании, размере, включена ли квота, используется ли программное сжатие. Эти сведения хранятся в классе Win32_LogicalDisk.
  • OS. Возвращает сведения об операционной системе, установленной на компьютере: системный каталог, версию, сервис пак, язык операционной системы, размер виртуальной памяти, размер оперативной памяти, количество процессоров, количество запущенных в данный момент процессов, регистрационные данные пользователя. Эти сведения хранятся в классе Win32_OperatingSystem.
  • PAGEFILESET. Возвращает сведения о конфигурации файла подкачки: путь к нему, максимальный размер, используемый в данный момент размер. Эти сведения хранятся в классе Win32_PageFileSetting.
  • PARTITION. Возвращает сведения о партициях, имеющихся на жестком диске: является ли активной, размер кластера партиции, общее количество блоков, описание партиции. Эти сведения хранятся в классе Win32_DiskPartition.
  • PRINTER. Возвращает описание настроек принтеров, установленных на компьютере: название принтера, производителя, приоритет, номер порта, поддерживаемая бумага. Эти сведения хранятся в классе Win32_Printer.
  • PROCESS. Возвращает описание запущенных на компьютере в данный момент процессов: название процесса, PID, командную строку, вызвавшую процесс, учетную запись, от имени которой работает процесс, размер используемой оперативной памяти, виртуальной памяти. Эти сведения хранятся в классе Win32_Process.
  • SHARE. Возвращает описание расшаренных папок Windows: название, описание, тип. Эти сведения хранятся в классе Win32_Share.
  • STARTUP. Возвращает сведения обо всех программах запускаемых вместе с операционной системой, а также о файлах, которые они, в свою очередь, запускают. Эти сведения хранятся в классе Win32_StartupCommand.

Таким образом, программа wmic.exe имеет следующий синтаксис: wmic.exe «опции» «псевдоним». Если же вы вошли в оболочку программы, тогда достаточно указывать только опции и псевдоним, без названия программы.

Примеры работы с программой

И напоследок давайте рассмотрим несколько примеров работы с данной программой.

  • wmic OS Get DataExecutionPrevention_Available. Данная команда отображает, используется ли механизм DEP на данный момент в операционной системе.
  • wmic /OUTPUT:C:\cpu_settings.txt CPU GET /VALUE. Создает на диске C:\ файл cpu_settings.txt, который будет содержать в себе описание процессора, установленного на вашем компьютере.
  • wmic PROCESS WHERE Name="cmd.exe" CALL Terminate. Данная команда завершает работу процесса с именем cmd.exe.
  • wmic PROCESS CALL Create calc.exe. Данная команда запускает процесс calc.exe.
  • wmic SERVICE WHERE Name="browser" LIST. Данная команда отображает сведения о настройках службы обозревателя компьютеров.

Программа WBEMTEST.exe

Также получить доступ к репозитарию CIM можно с помощью программы wbemtest.exe, имеющей графический интерфейс. Эта программа также расположена в каталоге %systemroot%\SYSTEM32\wbem.

Программа wbemtest.exe позволяет перечислять, открывать и создавать классы или экземпляры этих классов, а также выполнять WQL запросы к репозитарию CIM (представляют собой разновидность SQL-запросов), либо выполнять методы классов.

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

Подключаемся к пространству имен

Перед тем, как начать работу с программой wbemtest.exe, необходимо подключиться к нужному вам пространству имен. Для этого в окне программы нужно нажать на кнопку CONNECT…. После этого перед вами отобразится диалоговое окно, в котором нужно указать пространство имен, к которому выполняется подключение, а также логин пользователя и пароль (если логин пользователя и пароль не указаны, тогда будет выполнено подключение от имени текущего пользователя).

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

Использование запросов WQL для получения экземпляров классов

Обратите внимание на кнопку QUERY основного окна программы wbemtest.exe. С помощью данной кнопки можно отобразить диалог, позволяющий вводить WQL-запросы к репозитарию CIM и получать экземпляры классов, хранящиеся в нем.

После того, как вы введете WQL-запрос, перед вами отобразится диалоговое окно, содержащее в себе список всех найденных экземпляров, удовлетворяющих введенному вами запросу. Если вы дважды щелкните мышкой по какому-нибудь из экземпляров, тогда перед вами отобразится список всех доступных в этом экземпляре свойств, а также их значения.

Синтаксис запроса данных WQL Запросы WQL делятся на три типа: запросы данных, запросы схем и запросы событий. На страницах данной книги мы с вами рассмотрим только синтаксис запросов данных. Запросы данных предназначены для получения экземпляров класса, а также их ассоциаций.

  • Самым простым запросом данных является следующий запрос: Select * From «класс». С его помощью можно отобразить список всех экземпляров указанного класса, доступных на компьютере.

    Например, попробуйте ввести запрос для вывода экземпляров класса Win32_OperatingSystem.

  • Если же вам необходимо просмотреть значения не всех свойств класса, а лишь некоторых из них, тогда можно воспользоваться более конкретным запросом: Select «список свойств, значения которых нужно вывести» From «класс».

    Например, если вы введете запрос select SystemDevice, LargeSystemCache, EncryptionLevel from Win32_OperatingSystem, тогда сможете просмотреть значения только этих свойств класса.

  • Также можно воспользоваться запросом вида select «свойства» from «класс» where «свойство»=«значение». Данный запрос применяется в том случае, когда нужно отобразить только те экземпляры класса, свойства которых имеют указанные в запросе значения. При этом можно использовать операторы AND, NOT или OR, чтобы указать значения сразу нескольких свойств. Например select SystemDevice, EncryptionLevel from Win32_OperatingSystem where Primary=“TRUE” AND EncryptionLevel>40.
  • Также ключевое слово where может содержать в себе ключевое слово __CLASS. С его помощью можно ограничить вывод WQL-запроса только одним классом. Например, чтобы ограничить список выводимых экземпляров только классом Win32_Service, нужно воспользоваться запросом вида select * from Win32_BaseService where __CLASS=" Win32_Service ".

Давайте обобщим схему запроса данных WQL: select «свойства»|* from «класс» [where [__CLASS="класс"] [AND|OR] [«свойство»=«значение»]].

Выполнение методов классов

Если же вам нужно выполнить метод, который описан в одном из классов соответствующего пространства имен, тогда вам необходимо воспользоваться кнопкой EXECUTE METHOD…. После нажатия на данную кнопку программа попросит вас ввести название класса, в котором находится нужный вам метод. После того, как вы это сделаете, перед вами отобразится список методов данного класса, среди которых вам нужно выбрать нужный метод.

Если метод, который вы хотите вызвать, не требует ввода никаких входящих параметров, тогда после его выбора просто нажмите на кнопку EXECUTE!. В противном случае перед нажатием на данную кнопку также нужно нажать на кнопку EDIT IN PARAMETERS. После этого, в появившемся диалоге OBJECT EDITOR FOR _PARAMETERS, дважды щелкнуть по каждому параметру, значение которого нужно изменить (вызвав тем самым диалог PROPERTY EDITOR), а потом, изменить значение параметра, нажать на кнопку SAVE PROPERTY.

Если метод, который вы выполнили, возвращает какие-либо значения, их можно просмотреть после выполнения метода, просто нажав на кнопку EDIT OUT PARAMETERS.

Сервер сценариев Windows

А теперь давайте рассмотрим несколько простых примеров использования инструментария управления Windows в сервере сценариев WSH.

Первый пример будет очень простым. В нем мы попробуем отредактировать параметр реестра при помощи одного из методов класса WMI. Например, давайте изменим параметр строкового типа Auto из ветви реестра HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug.

  • /backup «путь и имя файла с расширением .rep». Данная команда выполняет архивирование репозитария CIM.
  • /restore «путь и имя файла с расширением .rep». Данная команда восстанавливает содержимое репозитария CIM из указанного файла-архива.
  • /standalonehost «уровень аутентификации процесса svchost.exe». Перемещает службу инструментария управления Windows в отдельный процесс svchost.exe. Если уровень аутентификации не задан, используется уровень 4.
  • /sharedhost. Перемещает службу инструментария управления Windows в общий процесс svchost.exe.
  • /salvagerepository. Выполняет проверку репозитария CIM на корректность и в случае обнаружения неполадок выполняет его восстановление на основе стандартных mof-файлов.
  • /verifyrepository «путь к репозитарию CIM». Выполняет проверку репозитария CIM на корректность. Если не указывать путь к рапозитарию CIM (или его копии), будет выполнена проверка текущего репозитария CIM.
  • /resetrepository. Восстанавливает репозитарий CIM к состоянию, в котором он был на момент установки операционной системы.
  • /resyncperf «PID службы WMI». Данная команда заново регистрирует в инструментарии управления Windows системные библиотеки производительности.
  • /clearadap. Удаляет из разделов реестра, принадлежащих службам, все параметры, связанные с инструментарием управления WIndows.
Листинг 9.1. Вызов методов инструментария управления Windows
Set WMIReg = GetObject("winmgmts:{impersonationLevel=impersonate}!root/Default:StdRegProv")
'если метод возвращает значение, отличное от 0, значит произошла
'ошибка и изменение параметра не произошло.
if WMIReg.SetStringValue (&H80000002,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug","Auto", 0) then MsgBox "Произошла ошибка", vbCritical

Давайте детально рассмотрим данный пример.

Моникер

С помощью первой строки примера мы подключаемся к репозитарию CIM и получаем указатель на объект WMI, определенный моникером, являющимся атрибутом метода GetObject.

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

Наиболее простой синтаксис моникера следующий: Winmgmts::«класс»[.«ключевое свойство»=«значение»]. С его помощью мы подключаемся к классу или экземпляру класса (если указывается ключевое свойство и значение) пространства имен Root\cimv2 (именно оно используется по умолчанию). В качестве примера можно привести следующий моникер: winmgmts::Win32_Service.Name="DHCP".

Если же вам нужно изменить пространство имен, к которому вы подключаетесь, а также компьютер, тогда нужно воспользоваться следующим синтаксисом моникера: Winmgmts:\\[«компьютер»]\«пространство имен»:«класс»[.«ключевое свойство»=«значение»]. Если вместо названия компьютера поставить точку, тогда подключение будет выполнено к локальному компьютеру. Например, winmgmts:\\.\Root\Cimv2:Win32_Service.Name="DHCP" или winmgmts://NOUT/Root/Cimv2:Win32_Service.Name="DHCP". Заметьте, что в первом случае для указания пространства имен и подключаемого компьютера мы используем символ «\», а во втором случае — символ «/». Эти символы равнозначны.

Уровень заимствования прав

Следующий пример моникера: Winmgmts:[{impersonationLevel=«уровень заимствования прав»}!]\\[«компьютер»]\«пространство имен»:«класс»[.«ключевое свойство»=«значение»]. В нем мы используем новое ключевое слово impersonationLevel, которое определяет уровень заимствования прав пользователя. Возможны следующие уровни заимствования.

  • Anonymous. Использовать минимальные привилегии.
  • Identify. Запросить привилегии пользователя, если будет нужно. По умолчанию же использовать минимальные привилегии.
  • Impersonate. Использовать привилегии пользователя.

Уровень аутентификации

Еще один пример моникера: Winmgmts:[{impersonationLevel=«уровень заимствования прав», AuthenticationLevel=«уровень аутентификации»}!]\\[«компьютер»]\«пространство имен»:«класс»[.«ключевое свойство»=«значение»]. В нем мы используем ключевое слово AuthenticationLevel, которое определяет уровень аутентификации и может принимать следующие значения.

  • Default. Использовать настройки аутентификации Windows. Данный уровень используется по умолчанию.
  • None. Не производить аутентификацию.
  • Connect. Выполнять аутентификацию клиента только при соединении с сервером.
  • Call. Выполнять аутентификацию клиента при получении любого запроса от сервера.
  • Pkt. Проверять все данные, получаемые от клиента.
  • PktIntegrity. Проверять любые данные, переданные как сервером, так и клиентом.
  • PktPrivacy. Проверять любые данные, переданные как сервером, так и клиентом, а также выполнять шифрование аргументов удаленных вызовов процедур.

Привилегии

И еще один пример синтаксиса моникера: Winmgmts:[{impersonationLevel=«уровень заимствования прав», AuthenticationLevel=«уровень аутентификации»}, (привилегия, привилегия и т.д.)!]\\[«компьютер»]\«пространство имен»:«класс»[.«ключевое свойство»=«значение»]. В нем мы указываем дополнительные привилегии (если перед привилегией поставить восклицательный знак, тогда ее использование будет запрещено). Например, возможны следующие привилегии.

  • Audit. Разрешить создание записей в стандартном журнале SECURITY (eventvwr.msc).
  • ChangeNotify. По умолчанию привилегия установлена. Разрешает не проходить все проверки прав доступа пользователя.
  • CreatePageFile. Разрешить создание файла подкачки.
  • CreatePermanent. Разрешить создание постоянного объекта.
  • CreateToken. Разрешить создание первичного маркера.
  • Backup. Разрешить выполнение операций архивирования.
  • Debug. Разрешить отладку процесса.
  • EnableDelegation. Разрешить делегирование для учетных записей.
  • IncreaseBasePriority. Разрешить увеличение приоритета процесса.
  • IncreaseQuota. Разрешить увеличение квоты, назначенной процессу.
  • LoadDriver. Разрешить загрузку и выгрузку драйверов устройств.
  • LockMemory. Разрешить блокировку страниц памяти.
  • MachineAccount. Разрешить создание привилегированной учетной записи.
  • PrimaryToken. Разрешить назначение первичного маркера процесса.
  • ProfileSingleProcess. Разрешить сбор информации о профилях для одиночного процесса.
  • RemoteShutdown. Разрешить выключение удаленного компьютера.
  • Restore. Разрешить операции восстановления.
  • Security. Повышает подключение к репозитарию до оператора системы безопасности.
  • Shutdown. Разрешить выключение локального компьютера.
  • SyncAgent. Разрешить синхронизацию данных службы каталогов.
  • SystemEnvironment. Разрешить изменение энергонезависимой памяти.
  • SystemProfile. Разрешить сбор информации о профилях.
  • SystemTime. Разрешить изменение системного времени.
  • TakeOwnership. Разрешает получать права владельца на объект (тем не менее, это не дает полного доступа к объекту).
  • Tcb. Повышает общие права сценария на работу в системе.
  • Undock. Разрешить отстыковку портативных компьютеров.

Например, чтобы разрешить выполнение перезагрузки компьютера, нужно использовать моникер winmgmts:{impersonationLevel = Impersonate, (Shutdown)}!\\.\root\cimv2:Win32_OperatingSystem.

Вызов методов WMI

При помощи второй строки примера мы вызываем метод класса, позволяющий изменить значение параметра строкового типа. Как правило, каждый метод после своей работы возвращает код выполнения, который определяет либо ошибку, произошедшую при работе метода, либо то, что метод выполнен без ошибок (в этом случае всегда возвращается значение 0).

Использование WQL-запросов

Еще одним способом работы с репозитарием CIM является выполнение запросов WQL (листинг 9.2).

Листинг 9.2. Использование WQL-запроса
'Подключаемся к пространству root\cimv2 репозитария указанного компьютера
Set WMIReg = GetObject("winmgmts:{impersonationLevel=impersonate}!//" & InputBox("Введите название компьютера, к которому будем подключаться (введите точку, если нужно подключиться к локальному компьютеру).", "Connect...") & "/root/CimV2")
'Выполняем запрос данных WQL, возваращающий все экземпляры данного класса.
'После этого отобразаем содержимое свойств всех найденных экземпляров в
'цикле For Each…Next
Set WMI = WMIReg.ExecQuery ("select * from Win32_Registry")
For Each i in WMI
MsgBox "Подключились к " & i.Name & "  :  " & i.Status & vbCrLf & "Текущий размер реестра: " & i.CurrentSize & " Mb" & vbCrLf & "Максимальный размер реестра: " & i.MaximumSize & " Mb"
Next

WQL-запрос к репозитарию CIM выполняется с помощью метода ExecQuery объекта SWbemServices объектной модели WMI. Заметьте, как именно возвращается результат запроса — в виде массива. Мы же с помощью цикла for each in выполняем перечисление каждого из элементов массива.

Редактирование значений свойств

Следующий листинг приводит пример изменения значения свойства экземпляра класса.

Листинг 9.3. Запись в свойство инструментария WMI
Set WMIReg = GetObject("winmgmts:{impersonationLevel=impersonate}!//" & InputBox("Введите название компьютера, к которому будем подключаться (введите точку, если нужно подключиться к локальному компьютеру).", "Connect...") & "/root/CimV2")
Set WMI = WMIReg.ExecQuery ("select * from Win32_Registry")
For Each i in WMI
MsgBox "Подключились к " & i.Name & "  :  " & i.Status & vbCrLf & "Текущий размер реестра: " & i.CurrentSize & " Mb" & vbCrLf & "Максимальный размер реестра: " & i.MaximumSize & " Mb" & vbCrLf & "Желаемый размер реестра: " & i.ProposedSize & " Mb"
Temp = InputBox ("Введите новый желаемый раздел реестра", "Только не перестарайтесь")

'конечно, размер реестра в виде строки – это ваше дело
'но мы такие значения все-таки отфильтруем
if NOT IsNumeric(Temp) then WScript.Quit
if Temp = "" then WScript.Quit

'Следующие две строки записывают в свойство, обратите на них внимание
i.ProposedSize = temp
i.Put_
MsgBox "Подключились к " & i.Name & "  :  " & i.Status & vbCrLf & "Текущий размер реестра: " & i.CurrentSize & " Mb" & vbCrLf & "Максимальный размер реестра: " & i.MaximumSize & " Mb" & vbCrLf & "Желаемый размер реестра: " & i.ProposedSize & " Mb"
Next

Обратите внимание, что после записи в свойство при помощи строки вида «объект».«свойство»=«значение», необходимо использовать метод Put_ данного объекта. С его помощью новое значение сохраняется в репозитарии CIM (если его не использовать, тогда свойство будет изменяться только на момент работы сценария, после чего опять принимать свое исходное значение).

Категория: Службы и консоли | Добавил: masterov (26.11.2017) | Автор: Андрей Мастеров E W
Просмотров: 44 | Рейтинг: 0.0/0
Другие материалы по теме:
Всего комментариев: 0
avatar