PAUSE Imprimante VBS Windows 2000 - VB/VBA/VBS - Programmation
Marsh Posté le 08-06-2005 à 09:31:41
arf je comprend pas tellement j ai bien installe PrnAdmin.dll sur ma machine cliente
mais des ke j execute
oMaster = ObjectCreate("PrintMaster.PrintMaster.1" ) (reference a ton lien "ici..." cf plus haut
Il me dit qu il y a une erreur ...
Marsh Posté le 08-06-2005 à 09:55:50
arf! peut-être parce que: implicitement, le site en question omet systématiquement l'instruction set pour une variable objet (Set oMaster = ...). De manière plus académique chez M$...
Marsh Posté le 08-06-2005 à 13:23:43
ca sera plus imple voila le code ke j ai mis
Set WshShell = Wscript.CreateObject("Wscript.Shell" )
WshShell.Run "regsvr32 /s Prnadmin.dll",1,TRUE
Set oMaster = CreateObject("PrintMaster.PrintMaster.1" )
oMaster.PrinterPause( "\\frasprntst", "\FRAPIJ2800" )
Et il me met "Cannot use parentheses when calling sub"
Marsh Posté le 08-06-2005 à 13:30:19
Je te remercie Vraiement beaucoup
PS ca marche sur Windows 2000 ca marchera t il ossi sur Windows 2003 ?
Marsh Posté le 08-06-2005 à 16:04:51
T'avais un sur-stock de parenthèses
Bien-sur! sur 2k3; même mieux, pour certaines méthodes exploitant à 'fond' WMI.
En plus, des scripts fournis prn*.vbs
Tu as la doc associée PrnAdmin.doc qui présente l'essentiel.
Marsh Posté le 09-06-2005 à 08:01:06
Je te remercie encore vraiement beaucoup
c bon c a archiver
Marsh Posté le 09-06-2005 à 09:52:00
non pa tt de suite a archiver ... un peit truc encore
Voila j ai un morceau de code
arrComputers = Array("FRASPRN31" )
Set objWMIService = Nothing
Set colItems = Nothing
'Connection in Win32_NTLogEvent count number of printer
For Each strComputer In arrComputers
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2" )
Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_NTLogEvent where logfile = 'system' and sourcename = 'print' and type = 'Information' and eventcode = '10'", "WQL", _
wbemFlagReturnImmediately + wbemFlagForwardOnly)
For Each objItem In colItems
nb_print = nb_print + 1
Next
Next
MsgBox(nb_print)
Et il me met erreur de memoire
Error : Out of Memory
Code : 80041006
Source : SWbemServices
Comment on fait pour palier ce pb ?
Marsh Posté le 10-06-2005 à 16:44:34
Ouch!
Tu aurais dû créer un autre topic, pour un peu ...
J'ai réussi à créer la même erreur, par des moyens pas très académiques (settings de WMI sur l'hystérisis d'objets client), sur une collection de 10 events, mais ça me paraît un peu gros!... J'opte, avant tout, sur le fait que le nombre d'objets événements retournés, via la requête, doit être trop important.
Pourtant ton appel en mode semi-synchrone est bon avec les iFlags optimums juste un petit avis, utilise Eventtype(Entier octet) au lieu de Type(string)
Pour contourner ce problème, essaie par la méthode d'appel Asynchrone ...
'- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
'Traitement du log mode asynchrone
'Note: Pour des raisons de sécurité dans ce mode, Ajouter ou Modifier
'[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WBEM\CIMOM] "UnsecAppAccessControlDefault"="1"
'DEB
strcomputer = "Ordprin"
bdone = False
NBEvent=0
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strcomputer & "\root\cimv2" )
Set oSink = WScript.CreateObject("WbemScripting.SWbemSink", "SINK_" )
objWMIService.ExecQueryAsync oSink, "SELECT * FROM Win32_NTLogEvent where logfile = 'system' and sourcename = 'print' and Eventtype = 2 and eventcode = 6","WQL", _
wbemFlagSendStatus
'test
' objWMIService.ExecQueryAsync oSink,"Select * from Win32_NTLogEvent where logfile = 'system' and sourcename = 'DCOM' and Eventtype = 1 and eventcode = 10002", "WQL", &h80
'attend la fin du moulinet!
While Not bdone
WScript.sleep 1000
Wend
'FIN
'Sur événement fin traitement requête asynchrone
Sub SINK_onCompleted(HResult, objErr, objcontext)
if Hresult=0 then _
WScript.Echo "Requête terminée, " & _
nbevent & " évènement(s) retourné(s)"
bdone = True
End Sub
'sur arrivée d'un objet
Sub sink_onObjectReady(obj, objcontext)
nbevent=nbevent+1
'TEST VISUALISATION (à utiliser sur une petite collection, sinon panne de souris!)
Mes= "Journal d'événements '" & obj.LogFile & _
"' de l'ordinateur " & obj.ComputerName & vbcrlf & vbcrlf
Mes= Mes & "Numéro de l'enregistrement ." & vbtab & obj.RecordNumber & vbcrlf
Mes= Mes & "Catégorie . . . . . . . . . . . . ." & vbtab & obj.category & vbcrlf
if obj.CategoryString <> "" then
Mes= Mes & "Nom . . . . . . . . . . . . . . . ." & vbtab & obj.CategoryString & vbcrlf
end if
Mes= Mes & "Généré part. . . . . . . . . . . ." & vbtab & obj.SourceName & vbcrlf
Mes= Mes & "Sous la session. . . . . . . . . ." & vbtab & obj.user & vbcrlf
Mes= Mes & "Survenu le . . . . . . . . . . . ." & vbtab & DateStringToDate (obj.TimeGenerated) & vbcrlf
Mes= Mes & "Inscrit le. . . . . . . . . . . . . ." & vbtab & DateStringToDate (obj.TimeWritten) & vbcrlf
Mes= Mes & "A le Code d'événement . . . ." & vbtab & obj.EventCode & vbcrlf
Mes= Mes & "De type. . . . . . . . . . . . . . ." & vbtab & obj.Type & vbcrlf
Mes= Mes & "Avec le message. . . . . . . . ." & vbtab & obj.Message
WScript.Echo Mes
'FIN TEST VISUALISATION
End Sub
'Petit traitement de datetime exploité pour TEST dans sink_onobjectready
Function DateStringToDate(dtmEventDate)
DateStringToDate = CDate(Mid(dtmEventDate, 5, 2) & "/" & _
Mid(dtmEventDate, 7, 2) & "/" & Left(dtmEventDate, 4) _
& " " & Mid(dtmEventDate, 9, 2) & ":" & _
Mid(dtmEventDate, 11, 2) & ":" & Mid(dtmEventDate, _
13, 2))
End Function
Marsh Posté le 25-05-2005 à 07:20:40
Bonjour,
Je voudrais mettre en pause des imprimantes (en VBScript) qui sont sur certains serveurs, j' ai trouvé des scripts pour windows 20003 (laboratoire Microsoft) qui marche bien
strComputer = "."
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2" )
Set colInstalledPrinters = objWMIService.ExecQuery _
("Select * from Win32_Printer Where Name = 'Nom de l'imprimante'" )
For Each objPrinter in colInstalledPrinters
ObjPrinter.Pause()
Next
Mais, Aucun script trouvé ou syntaxe pour W2K, quelle est la syntaxe a utilisé car "objpinter.Pause()", il connait pas
Et je me galére depuis plusieurs jours sans trouver ....
Merci