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))))
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
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
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 ...
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
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...
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...
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...
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
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...
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...