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



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


or die "Невозможно создать объект сервера: " .i/nn32' .OLE- > Last etc :().

print "--- Prope-ties ---\n";

print join("\n" , map {$_->{Name}

}

(in $procschm->{Properties_} )}:

print "\n--- Methods ---\n";

printoin("\n",map {$_->{Name}

}

(in $procschm->{Methods_l ;}:

Вывод (на машине с NT4.0) выглядит примерно так:

— Properties —

Caption

CreationCiassName

CreationDate

CSCreationClassName

CSName

Description

ExecutablePath

ExecutionState

Handle

InstallDate

KernelModeTime

MaximumWorkingSetSize

MinimumWorkingSetSize

Name

OSCreationClassName

OSNarne

PageFaults

PageFilellsage

PeakPageFileUsage

PeakWorkingSetSize

Priority

Processld

QuotaNonPagedPoolUsage

QuotaPagedPoolUsage

QuotaPeakNonPagedPoolUsage

QuotaPeakPagedPoolUsage

Status

TerminationDate

User'ModeTime

WindowsVersion

WorkingSetSize

--- Methods ---

Create

Terminate

GetOwner

GetOwrierSui

Рассмотрим это подробнее. Чтобы получить список запущенных процессов, нужно запросить все экземпляры объектов Win32_Process:

use Win32::OLE('in'):

it выполняем все первоначальные шаги в одном цикле

$sob] = Win32::OLE->GetOcject(

'winmgmts:{impersonationLeveI=inpersorate}') or die

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

foreach Sprocess (in $sobj->InstancesOf("Win32_Process")){

print $process->{Name)." имеет pid #".$process->{Process!d}, "\n"; }

Первоначальное отображаемое имя не включает путь к определенному объекту (т. е. мы отбросили ! Win32_Process). Итак, получен объект связи с сервером. В результате вызова метод InstancesOf () возвращает объект-коллекцию (collection object), который содержит все экземпляры конкретного объекта. Наш код обращается к каждому объекту и выводит его свойства Name и Processld. В итоге, у нас есть список всех запущенных процессов.

Чуть менее великодушный подход к обойденным в цикле процессам позволил бы использовать один из методов, указанных в приведенном выше списке:

foreach $process (in $sobj->InstancesOf ("Win32__Process")){

$process->Terminate(1); }

В результате, все работающие процессы будут завершены. Я не рекомендую вам запускать эту программу в таком виде; подправьте ее в соответствии с вашими нуждами, сделав более конкретной.

Теперь у вас есть необходимые знания, чтобы начать использовать WMI для управления процессами. В WMI есть \Уш32-расширения для многих других частей операционной системы, включая реестр и журнал событий.

Вот и все, что мы хотели сказать об управлении процессами в WinNT и 2000. Теперь перейдем к последней операционной системе.




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