Toon posts:

[VBS] bepaalde job uit bepaalde printer deleten

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik moet een bepaalde printjob deleten uit een queue van een bepaalde printer als die er langer als 30 min instaat. Dit script heb ik daarvoor gemaakt:

Const USE_LOCAL_TIME = True
Set DateTime = CreateObject("WbemScripting.SWbemDateTime")
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

Set colInstalledPrintjob = objWMIService.ExecQuery _
("Select * from Win32_PrintJob")

Wscript.Echo "[Printer]-[Job ID]-[Submit tijd]-[Total Pages]"

wscript.Echo "Jobs deleted:"
For Each objPrinter in colInstalledPrintjob
'Wscript.Echo "Name: " & objPrinter.Name
DateTime.Value = objPrinter.TimeSubmitted
dtmActualTime = DateTime.GetVarDate(USE_LOCAL_TIME)
TimeinQueue = DateDiff("n", dtmActualTime , Now)
If TimeinQueue > 30 and ObjPrinter.Name = "<naam printer>" Then
strPrinterName = Split(objPrinter.Name,",",-1,1)
Wscript.Echo strPrinterName(0) & ", " _
& objPrinter.JobID & ", " & dtmActualTime & " , " & _
objPrinter.TotalPages
objPrinter.Delete_
End If
Next

Deze regel geeft problemen: " If TimeinQueue > 30 and ObjPrinter.Name = "<naam printer>" Then"

Bij <naam printer> vul ik de betreffende printer in. Maar dit werkt niet. (als ik alles na "and" tot "then" weghaal, dan wordt dit script voor elke printer uitgevoerd en dat moet niet). Wat doe ik hier verkeerd?

[ Voor 12% gewijzigd door Verwijderd op 03-11-2005 14:12 ]


  • sopsop
  • Registratie: Januari 2002
  • Laatst online: 24-04 15:13

sopsop

[v] [;,,;] [v]

Haal de quote bij:
code:
1
 'Wscript.Echo "Name: " & objPrinter.Name

eens weg en kijk wat er staat. Check of dat overeenkomt met de printernaam die jij gebruikt.

[ Voor 54% gewijzigd door sopsop op 03-11-2005 14:17 ]


Verwijderd

Topicstarter
boppert schreef op donderdag 03 november 2005 @ 14:16:
Haal de quote bij:
code:
1
 'Wscript.Echo "Name: " & objPrinter.Name

eens weg en kijk wat er staat. Check of dat overeenkomt met de printernaam die jij gebruikt.
Jep dat komt overeen. Maar is de wijze waarop ik deze code gebruik wel goed? kun je dus met objprinter.name een printer naam invoeren of is de naam van dit object anders?

  • Brahiewahiewa
  • Registratie: Oktober 2001
  • Laatst online: 30-09-2022

Brahiewahiewa

boelkloedig

'k Zou de printername in je query zetten:
Visual Basic:
1
Set colInstalledPrintjob = objWMIService.ExecQuery ( "Select * from Win32_PrintJob Where Name='" & <naam printer> & "*'" )
Maar misschien loopt 't wel stuk op het printjob nummer wat je met .Name meekrijgt.
Uit de Platform SDK:
Name
Data type: string
Access type: Read-only
Qualifiers: Key

Name of the printer to which the print job is being spooled followed by a comma and then the number of the job. For example, PrinterName, JobNumber.
Dat kun je dus oplossen met de wildcard (*) achter de printername

[ Voor 64% gewijzigd door Brahiewahiewa op 03-11-2005 15:01 ]

QnJhaGlld2FoaWV3YQ==


Verwijderd

Topicstarter
Brahiewahiewa schreef op donderdag 03 november 2005 @ 14:54:
'k Zou de printername in je query zetten:
Visual Basic:
1
Set colInstalledPrintjob = objWMIService.ExecQuery ( "Select * from Win32_PrintJob Where Name='" & <naam printer> & "*'" )
Maar misschien loopt 't wel stuk op het printjob nummer wat je met .Name meekrijgt.
Uit de Platform SDK:
[...]
Dat kun je dus oplossen met de wildcard (*) achter de printername
Dat had ik eerst ook, maar hoe zorg ik ervoor dat de 2e select query alleen gaat "selecten" op een specifieke printer?

Verwijderd

Topicstarter
Als ik de selectie Query aanpas naar: Set colInstalledPrintjob = objWMIService.ExecQuery ( "Select * from Win32_PrintJob Where Name='" & <naam printer> & "*'" ). dan krijg ik de error: job.vbs(6, 108) Microsoft VBScript compilation error: Expected ')'

Oplossing 2:

Het toevoegen van een wildcard. Als ik de if statement veranderd in: If TimeinQueue > 0.01 and objprinter.name = "<printernaam>, <job_id die nu bezig is>" Then.... dan werkt het script!. Oftewel ik moet nu alleen nog weten hoe ik een wildcard kan invoegen (een * of een ? werkt niet!)

[ Voor 115% gewijzigd door Verwijderd op 03-11-2005 16:35 ]


Verwijderd

Topicstarter
Iemand nog suggesties?

  • Brahiewahiewa
  • Registratie: Oktober 2001
  • Laatst online: 30-09-2022

Brahiewahiewa

boelkloedig

Verwijderd schreef op donderdag 03 november 2005 @ 16:04:
Als ik de selectie Query aanpas naar: Set colInstalledPrintjob = objWMIService.ExecQuery ( "Select * from Win32_PrintJob Where Name='" & <naam printer> & "*'" ). dan krijg ik de error: job.vbs(6, 108) Microsoft VBScript compilation error: Expected ')'
Tja, je moet de naam van die printer wel weer tussen dubbele kwootjes zetten, bevobbeld:
Visual Basic:
1
Set colInstalledPrintjob = objWMIService.ExecQuery ( "Select * from Win32_PrintJob Where Name='" & "HP LaserJet" & "*'" )
Oplossing 2:

Het toevoegen van een wildcard. Als ik de if statement veranderd in: If TimeinQueue > 0.01 and objprinter.name = "<printernaam>, <job_id die nu bezig is>" Then.... dan werkt het script!. Oftewel ik moet nu alleen nog weten hoe ik een wildcard kan invoegen (een * of een ? werkt niet!)
Als je persé in het IF statement wil hebben, moet je dat printjob nummer eerst afsplitsen.
Dat doe je een regel verderop toch al, dus die regel een stukje naar voren halen
Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Const USE_LOCAL_TIME = True
Set DateTime = CreateObject ( "WbemScripting.SWbemDateTime" )
strComputer = "."
Set objWMIService = GetObject( "winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2" )
Set colInstalledPrintjob = objWMIService.ExecQuery ( "Select * from Win32_PrintJob" )
Wscript.Echo "[Printer]-[Job ID]-[Submit tijd]-[Total Pages]"
wscript.Echo "Jobs deleted:"

For Each objPrinter in colInstalledPrintjob

    'Wscript.Echo "Name: " & objPrinter.Name
    DateTime.Value = objPrinter.TimeSubmitted
    dtmActualTime = DateTime.GetVarDate ( USE_LOCAL_TIME )
    TimeinQueue = DateDiff ( "n", dtmActualTime , Now )
    strPrinterName = Split ( objPrinter.Name, ",", -1, 1 )

    If TimeinQueue > 30 and strPrinterName ( 0 ) = "<naam printer>" Then

        Wscript.Echo strPrinterName ( 0 ) & ", " & objPrinter.JobID & ", " & dtmActualTime & " , " & objPrinter.TotalPages
        objPrinter.Delete_

    End If

Next

QnJhaGlld2FoaWV3YQ==


Verwijderd

Topicstarter
Oplossing 2 werkt! bedankt mensen.

[ Voor 88% gewijzigd door Verwijderd op 04-11-2005 10:09 ]

Pagina: 1