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

       

Работа с очередями и заданиями печати через ADSI



Работа с очередями и заданиями печати через ADSI

Вот как можно определить названия очередей на определенном сервере и модели принтеров, используемых для обслуживания этих очередей:

use Win32::OLE 'in';

$ADsPatn="WinNT://DomainName/PrintServerName, computer";

$c = Win32::OLE->GetObject($ADsPath) or die "Невозможно получить $ADsPath\n";

foreach Sadsobj (in $c){

print $adsobj->{Name}.":".Sadsobj->{Model}."\n"

if ($adsobj->{Class} eq "PrintQueue"); }

После того как стало известно название очереди печати, можно напрямую связаться с ней для запросов и управления:

use Win32::OLE 'in';

# таблица получена из раздела

# 'Active Directory Service Interfaces 2.5->ADSI Referen.ce->

# ADSI Interfaces->Dynamic Object Interfaces->IADsPrintQueueOperations->

lADsPrintOueueOperations Property Methods' (уф!) из ADSI 2.5 SDK



%status =

(0x00000001 => 'PAUSED', 0x00000002 => 'PENDING_DELETION',

0x00000003 => 'ERROR' , 0x00000004 => 'PAPER_JAM',

0x00000005 => 'PAPER_OUT', 0x00000006 => 'MANUAL_FEED',

0x00000007 => 'PAPER_PROBLEM', 0x00000008 => 'OFFLINE',

0x00000100 => 'IO_ACTIVE', 0x00000200 => 'BUSY',

0x00000400 => 'PRINTING', 0x00000800 => 'OUTPUT_BIN_FULL',

0x00001000 => 'NOTJWAILABLE'. 0x00002000 => 'WAITING',

0x00004000 => 'PROCESSING', 0x00008000 => 'INITIALIZING'.

0x00010000 => 'WARMING_UP'. 0x00020000 => 'TONER_LOW.

0x00040000 => TJO_TONER'. 0x00030000 => 'PAGE_PUNT'.

0x00100000 => 'USER_INTERVENTION', 0x00200000 => 'OUT_OF_MEMORY'.

0x00400000 => 'DOOR_OPEFJ', 0x00800000 => 'SEflVERJNKNOWN'.

0x01000000 => 'POWER_SAVE'):

SADsPath = "^inNT' //PrintServerNafre/PrintQ-jeueNatne":

$p = tvin32: :OLE->GetOoject($ADsPath) or aie "Невозможно полу-п-ть $ADsPat'.\^".

print "Состояние принтера " . $c->{Name}

((exists $p--"i;jt au.s}; ? $status<$c-'{atatub) t . Nji ACilVL )

Объект Printoutip имеет несколько методов для контроля очереди печати: PausoO. Это позволяет управлять действиями самой очереди. А что если мы захотим изучить или обработать конкретные задачи из очереди?

Для того чтобы добраться до самих заданий, необходимо вызвать метод PnntJobs() объекта возвращает коллекцию, состоящую из объектов PrintJob, каждый из которых имеет ряд свойств и методов. Например, вот как можно показать список заданий из определенной очереди:

use Win32::OLE

и таблица получена из раздела

и Active Directory Service Interfaces 2.5->ADSI Reference

Я ADSI Interfaces->Dynamic Object Interfaces-MADsPrintJotiOporai зспз->

fl lAOsPrintJobOperations Property Methods' (двойное уф) в ADSI 2.5 SDK

%status = (0x00000001 => 'PAUSED', 0x00000002 => 'ERROR'.

0x00000004 => 'DELETING',0x00000010 => 'PRINTING',

0x00000020 => 'OFFLINE', 0x00000040 ^> 'PAPEROUT'.

0x00000080 => 'PRINTED1, 0x00000100 -> 'DELETED1):

SADsPath = "WinNT://PrintServerName/PrintQueueNamc":

$p = Win32: :GLE->GetObject($AQsPath) or

die "Невозможно лолучип, SADsPaV'\'i

$jobs = $p->PrintJobs(); foreach $job (in $jobs){ print $]ob->{User( .

$status{$job->{status}} . "\n"; }

Каждое задание можно приостановить (Раиse()) и продолжить.



Содержание раздела