Perl для системного администрирования




Управление процессами в NT/2000 - часть 15


  • Применение этого соединения для получения объекта Win32_Process
  • Все это можно сделать за один шаг, если использовать COM moniker's display name. В соответствии с WMI SDK, «в модели составных объектов (СОМ) моникер - это стандартный механизм для инкапсуляции местоположения другого СОМ-объекта и связи с ним. Текстовое представление моникера называется отображаемым именем». Вот и простой способ в действии:

    usa Win32::OLECirT);

    Sprocschm = Win32::OLE->GetObject(

    'winmgmts: {impersonationLevel=impersonate}! Wiri32_Process ')

    or die "Невозможно создать объект сервера: ".Win32: :OLE->LastError()."\n":

    Теперь, когда у нас есть объект Win32_Process, можно с его помощью получить нужные части схемы, представляющие собой процессы в Win32. В их число входят все доступные свойства и методы Win32_Pro-cess, которые годятся к употреблению. Применяемая программа довольно проста; единственно, что не вполне очевидно, - это использование оператора in в Win32: :01_Е. Чтобы объяснить это, нам придется немного отклониться от темы.

    Объект $procschm имеет два специальных свойства: Properties и Methods. В каждом из них хранится специальный дочерний объект, известный как collection object в терминологии СОМ. Объект collection object является родительским контейнером для других объектов; в этом случае в них хранятся объекты описания свойств (Properties_) и методов (Methods) схемы. Оператор in возвращает массив ссылок на каждый дочерний объект контейнера. Располагая таким массивом, можно обойти все его элементы в цикле, возвращая на каждой итерации свойство Name каждого дочернего объекта. О других известных применениях in можно узнать из раздела «ADSI (Интерфейсы активных служб каталогов)» главы 6. Вот как выглядит сама программа:

    use Win32::OLE('in'):

    соединяемся с пространством имен, даем указание действовать

    с правами пользователя и получаем объект Win32_process,

    просто используя отображаемое имя

    Sprocschm = Win32 -OLE->GetObject(

    'winmgmtr, : {impersor,ationl_evel = impersonate} ' win32._Process )




    Содержание  Назад  Вперед