OVH Cloud OVH Cloud

Purger les imprimantes.

4 réponses
Avatar
bayosky
Bonsoir,

Contexte : Réseau dans un collège avec serveur 2003
stations XP-Pro et encore d'antiques W98.
Adressage IP fixe
les profiles descendent du serveur ( OU et GPO pour XP ; poledit à
l'ancienne pour W98)

Les imprimantes sont reliées au réseau par des "serveurs d'impression"
( NetGear, HP, etc... )
On a aussi qq véritables imprimantes réseau

Compte tenu des comportements constatés..., j'aimerai qu'un script (
VBS? ) se lance à la déconnexion pour virer les impressions laissées
en attente par "la machine et l'utilisateur".
Je pensais utiliser WMI mais en fait je n'ai pas trouvé d'info claire
( pour moi)
donc j'aimerai savoir si qq a des pistes,
un truc tout prêt serait encore mieux :o))))

Merci d'avance

HB

4 réponses

Avatar
Méta-MCI
Bonsoir !

J'ai une petit script en Python (mais facile à adapter) :
Je le met ci-dessous.

@+

MCI

---------------------------------------------------


import win32com.client
strComputer = "."
objWMIService = win32com.client.Dispatch("WbemScripting.SWbemLocator")
objSWbemServices = objWMIService.ConnectServer(strComputer,"rootcimv2")
colItems = objSWbemServices.ExecQuery("Select * from Win32_Printer")
for objimp in colItems:
print objimp.Name
objimp.CancelAllJobs
Avatar
bayosky
Merci à vous deux ,

j'avais écrit

set Objet_WMI_Service =
Getobject("winmgmts:{impersonationLevel=impersonate}!.rootcimv2")
set Collection_Imprimantes = Objet_WMI_Service.ExecQuery("Select *
from Win32_Printer")
For Each Objet_Imprimante In Collection_Imprimantes
Objet_Imprimante.CancelAllJobs()
next

ce qui revient au même ( sans nom d'imprimante puisqu'il dépend de la
salle où se trouve l'utilisateur à ce moment là... ) mais je désire
que seuls les travaux demandés par l'utilisateur qui se déconnecte
soient détruits sinon bonjour les pb...

Il faudrait donc un truc du type

For Each Objet_Imprimante In Collection_Imprimantes
For Each Travail In Objet_Imprimante.Jobs
If Travail.Proprietaire.Name = Utilisateur then
Travail.Cancel
Endif
next
next
Je n'ai pas trouvé d'info sur les propriétés des membres de la
collection Jobs d'un objet Printer
Il semble pourtant hautement probable que l'équivalent de
"propriétaire" existe ...

où Utilisateur est le nom de l'utilisateur qui vient de se
déconnecter...

A moins que le script ne s'éxécute avec les droits de l'utilisateur et
donc, logiquement les tentatives de destruction d'autres travaux
provoqueraient des erreur à récupérer ...
Mais il me semble qu'un script "logoff " s'exécute avec un compte
"system" ? non ?
et si oui, où récupérer le nom de l'utilisateur qui quitte ...

bref..; c'est pas encore gagné...

A+

HB
Avatar
jbongran
bayosky wrote:
Merci à vous deux ,

j'avais écrit

set Objet_WMI_Service > Getobject("winmgmts:{impersonationLevel=impersonate}!.rootcimv2")
set Collection_Imprimantes = Objet_WMI_Service.ExecQuery("Select *
from Win32_Printer")
For Each Objet_Imprimante In Collection_Imprimantes
Objet_Imprimante.CancelAllJobs()
next

ce qui revient au même ( sans nom d'imprimante puisqu'il dépend de la
salle où se trouve l'utilisateur à ce moment là... ) mais je désire
que seuls les travaux demandés par l'utilisateur qui se déconnecte
soient détruits sinon bonjour les pb...

Il faudrait donc un truc du type

For Each Objet_Imprimante In Collection_Imprimantes
For Each Travail In Objet_Imprimante.Jobs
If Travail.Proprietaire.Name = Utilisateur then
Travail.Cancel
Endif
next
next
Je n'ai pas trouvé d'info sur les propriétés des membres de la
collection Jobs d'un objet Printer
Il semble pourtant hautement probable que l'équivalent de
"propriétaire" existe ...

où Utilisateur est le nom de l'utilisateur qui vient de se
déconnecter...

A moins que le script ne s'éxécute avec les droits de l'utilisateur et
donc, logiquement les tentatives de destruction d'autres travaux
provoqueraient des erreur à récupérer ...
Mais il me semble qu'un script "logoff " s'exécute avec un compte
"system" ? non ?
et si oui, où récupérer le nom de l'utilisateur qui quitte ...

bref..; c'est pas encore gagné...

A+

HB


En utilisant la propriété Owner de la class Win32_PrintJob ?
http://www.microsoft.com/technet/scriptcenter/guide/sas_prn_wjxs.mspx?mfr=true
En revanche, rien trouvé pour faire un cancel selectif d'un job...

Avatar
bayosky
Salut,

J'ai fouillé un peu le scriptcenter ..;

Finalement, avec
---------------------------------------------------
set Objet_WMI_Service Getobject("winmgmts:{impersonationLevel=impersonate}!.rootcimv2")
set Collection_Travaux = Objet_WMI_Service.ExecQuery("Select *
from Win32_PrintJob")
-----------------------------------------------------
on accède à l'ensemble des travaux en attente issus de LA machine donc
cela devrait convenir...
( pas besoin de owner , donc : si ça c'est encore là, c'est lui )

Il faudrait alors pouvoir faire, en suivant ...
------------------------------------
For each Travail in Collection_Travaux
Supprimer Travail
Next
---------------------------------------
Mais rien n'indique qu'une telle possibilité existe...


Y'a donc un os...

HB