Recientemente he tenido que usar wscript para gestionar impresoras y estos codigos han sido muy interesantes.
Script to manage Print Servers, Queues and Print Jobs
Changing Print Job Start Time
Changing Print Job Priority
Configuring Printer Availability
Configuring Printer Locations
Configuring Printer Priority
Deleting All Printers on a Print Server
Deleting Print Jobs
Deleting Specific Printers
Enumerating All Published Printers
Enumerating Printer Capabilities
Installing Multiple Printers for One Print Device
Installing a Printer
Monitoring Printer Status
Monitoring Printers with a Temporary Event Subscription
Monitoring Print Job Status
Monitoring Print Queues
Monitoring Print Queue Times
Monitoring the Print Service
Pausing a Printer
Pausing Printers with Empty Print Queues
Pausing Print Jobs
Purging a Print Queue
Receiving Notification When a Printer Stops
Renaming a Printer Published in Active Directory
Reporting Print Queue Statistics
Resuming All Paused Printers
Resuming a Paused Printer
Resuming Print Jobs
Retrieving Print Queue Statistics
Searching for Specific Printers
Transfering Print Jobs to a Different Print Queue
Updating Printer Locations
Changing Print Job Start Time
Uses ADSI to change the start time for all print jobs larger than 400K to 2 AM.
Set objPrinter = GetObject(«WinNT://atl-dc-02/ArtDepartmentPrinter,printqueue»)
For each objPrintQueue in objPrinter.PrintJobs
If objPrintQueue.Size > 400000 Then
objPrintQueue.Put «StartTime» , TimeValue(«2:00:00 AM»)
objPrintQueue.SetInfo
End If
Next
Changing Print Job Priority
Uses ADSI to change the priority of current print jobs based on the size of those print jobs.
Set objPrinter = GetObject(«WinNT://atl-dc-02/ArtDepartmentPrinter, printqueue»)
For each objPrintJob in objPrinter.PrintJobs
If objPrintJob.Size > 400000 Then
objPrintJob.Put «Priority» , 2
objPrintJob.SetInfo
Else
objPrintJob.Put «Priority» , 3
objPrintJob.SetInfo
End If
Next
Configuring Printer Availability
Configures a printer so that documents can only be printed between 8 AM and 6 PM.
dtmStartTime= «********080000.000000+000»
dtmEndTime= «********180000.000000+000»
strComputer = «.»
Set objWMIService = GetObject(«winmgmts:» _
& «{impersonationLevel=impersonate}!\\» & strComputer & «\root\cimv2»)
Set colPrinters = objWMIService.ExecQuery _
(«Select * From Win32_Printer Where DeviceID = ‘ArtDepartmentPrinter’ «)
For Each objPrinter in colPrinters
objPrinter.StartTime = dtmStartTime
objPrinter.UntilTime = dtmEndTime
objPrinter.Put_
Next
Configuring Printer Locations
Uses ADSI to configure the location attribute for all printers in a specified OU.
Set objOU = GetObject(«LDAP://OU = Finance, DC = fabrikam, DC = com»)
objOU.Filter = Array(«printqueue»)
For Each objPrintQueue In objOU
objPrintQueue.Put «Location» , «USA/Redmond/Finance Building»
objPrintQueue.SetInfo
Next
Configuring Printer Priority
Sets the priority for a printer to 2.
strComputer = «.»
Set objWMIService = GetObject(«winmgmts:» _
& «{impersonationLevel=impersonate}!\\» & strComputer & «\root\cimv2»)
Set colPrinters = objWMIService.ExecQuery _
(«Select * From Win32_Printer where DeviceID = ‘ArtDepartmentPrinter’ «)
For Each objPrinter in colPrinters
objPrinter.Priority = 2
objPrinter.Put_
Next
Deleting All Printers on a Print Server
Deletes all the printers from a print server.
strComputer = «.»
Set objWMIService = GetObject(«winmgmts:» _
& «{impersonationLevel=impersonate}!\\» & strComputer & «\root\cimv2»)
Set colInstalledPrinters = objWMIService.ExecQuery _
(«Select * from Win32_Printer»)
For Each objPrinter in colInstalledPrinters
objPrinter.Delete_
Next
Deleting Print Jobs
Deletes all print jobs larger than 1 megabyte.
strComputer = «.»
Set objWMIService = GetObject(«winmgmts:» _
& «{impersonationLevel=impersonate}!\\» & strComputer & «\root\cimv2»)
Set colPrintJobs = objWMIService.ExecQuery _
(«Select * from Win32_PrintJob Where Size > 1000000»)
For Each objPrintJob in colPrintJobs
objPrintJob.Delete_
Next
Deleting Specific Printers
Deletes all HP QuietJet printers installed on a computer.
strComputer = «.»
Set objWMIService = GetObject(«winmgmts:» _
& «{impersonationLevel=impersonate}!\\» & strComputer & «\root\cimv2»)
Set colInstalledPrinters = objWMIService.ExecQuery _
(«Select * from Win32_Printer Where DriverName = ‘HP QuietJet'»)
For Each objPrinter in colInstalledPrinters
objPrinter.Delete_
Next
Enumerating All Published Printers
Returns a list of all the printers published in Active Directory.
Const ADS_SCOPE_SUBTREE = 2
Set objConnection = CreateObject(«ADODB.Connection»)
Set objCommand = CreateObject(«ADODB.Command»)
objConnection.Provider = «ADsDSOObject»
objConnection.Open «Active Directory Provider»
Set objCommand.ActiveConnection = objConnection
objCommand.CommandText = «Select printerName, serverName from » _
& » ‘LDAP://DC=fabrikam,DC=com’ where objectClass=’printQueue'»
objCommand.Properties(«Page Size») = 1000
objCommand.Properties(«Timeout») = 30
objCommand.Properties(«Searchscope») = ADS_SCOPE_SUBTREE
objCommand.Properties(«Cache Results») = False
Set objRecordSet = objCommand.Execute
objRecordSet.MoveFirst
Do Until objRecordSet.EOF
Wscript.Echo «Printer Name: » & objRecordSet.Fields(«printerName»).Value
Wscript.Echo «Server Name: » & objRecordSet.Fields(«serverName»).Value
objRecordSet.MoveNext
Loop
Enumerating Printer Capabilities
Lists properties and capabilities for all the printers installed on a computer.
strComputer = «.»
Set objWMIService = GetObject(«winmgmts:» _
& «{impersonationLevel=impersonate}!\\» & strComputer & «\root\cimv2»)
Set colInstalledPrinters = objWMIService.ExecQuery _
(«Select * from Win32_PrinterConfiguration»)
For Each objPrinter in colInstalledPrinters
Wscript.Echo «Name: » & objPrinter.Name
Wscript.Echo «Collate: » & objPrinter.Collate
Wscript.Echo «Copies: » & objPrinter.Copies
Wscript.Echo «Driver Version: » & objPrinter.DriverVersion
Wscript.Echo «Duplex: » & objPrinter.Duplex
Wscript.Echo «Horizontal Resolution: » & _
objPrinter.HorizontalResolution
If objPrinter.Orientation = 1 Then
strOrientation = «Portrait»
Else
strOrientation = «Landscape»
End If
Wscript.Echo «Orientation : » & strOrientation
Wscript.Echo «Paper Length: » & objPrinter.PaperLength / 254
Wscript.Echo «Paper Width: » & objPrinter.PaperWidth / 254
Wscript.Echo «Print Quality: » & objPrinter.PrintQuality
Wscript.Echo «Scale: » & objPrinter.Scale
Wscript.Echo «Specification Version: » & _
objPrinter.SpecificationVersion
If objPrinter.TTOption = 1 Then
strTTOption = «Print TrueType fonts as graphics.»
Elseif objPrinter.TTOption = 2 Then
strTTOption = «Download TrueType fonts as soft fonts.»
Else
strTTOption = «Substitute device fonts for TrueType fonts.»
End If
Wscript.Echo «True Type Option: » & strTTOption
Wscript.Echo «Vertical Resolution: » & objPrinter.VerticalResolution
Next
Installing Multiple Printers for One Print Device
Installs two logical network printers (with different printer priorities) for the same physical print device.
strComputer = «.»
Set objWMIService = GetObject(«winmgmts:» _
& «{impersonationLevel=impersonate}!\\» & strComputer & «\root\cimv2»)
Set objPrinter = objWMIService.Get(«Win32_Printer»).SpawnInstance_
objPrinter.DriverName = «HP LaserJet 4000 Series PS»
objPrinter.PortName = «IP_169.254.110.160»
objPrinter.DeviceID = «PublicPrinter»
objPrinter.Location = «USA/Redmond/Building 37/Room 114»
objPrinter.Network = True
objPrinter.Shared = True
objPrinter.ShareName = «PublicPrinter»
objPrinter.Put_
objPrinter.DriverName = «HP LaserJet 4000 Series PS»
objPrinter.PortName = «IP_169.254.110.160»
objPrinter.DeviceID = «PrivatePrinter»
objPrinter.Location = «USA/Redmond/Building 37/Room 114»
objPrinter.Priority = 2
objPrinter.Network = True
objPrinter.Shared = True
objPrinter.Hidden = True
objPrinter.ShareName = «PrivatePrinter»
objPrinter.Put_
Installing a Printer
Installs a logical network printer on a print server.
strComputer = «.»
Set objWMIService = GetObject(«winmgmts:» _
& «{impersonationLevel=impersonate}!\\» & strComputer & «\root\cimv2»)
Set objPrinter = objWMIService.Get(«Win32_Printer»).SpawnInstance_
objPrinter.DriverName = «HP LaserJet 4000 Series PS»
objPrinter.PortName = «IP_169.254.110.160»
objPrinter.DeviceID = «ScriptedPrinter»
objPrinter.Location = «USA/Redmond/Building 37/Room 114»
objPrinter.Network = True
objPrinter.Shared = True
objPrinter.ShareName = «ScriptedPrinter»
objPrinter.Put_
Monitoring Printer Status
Displays current status for all printers on a computer.
strComputer = «.»
Set objWMIService = GetObject(«winmgmts:» _
& «{impersonationLevel=impersonate}!\\» & strComputer & «\root\cimv2»)
Set colInstalledPrinters = objWMIService.ExecQuery _
(«Select * from Win32_Printer»)
For Each objPrinter in colInstalledPrinters
Wscript.Echo «Name: » & objPrinter.Name
Wscript.Echo «Location: » & objPrinter.Location
Select Case objPrinter.PrinterStatus
Case 1
strPrinterStatus = «Other»
Case 2
strPrinterStatus = «Unknown»
Case 3
strPrinterStatus = «Idle»
Case 4
strPrinterStatus = «Printing»
Case 5
strPrinterStatus = «Warmup»
End Select
Wscript.Echo «Printer Status: » & strPrinterStatus
Wscript.Echo «Server Name: » & objPrinter.ServerName
Wscript.Echo «Share Name: » & objPrinter.ShareName
Wscript.Echo
Next
Monitoring Printers with a Temporary Event Subscription
Uses a temporary event consumer to issues alerts any time a printer changes status.
strComputer = «.»
Set objWMIService = GetObject(«winmgmts:» _
& «{impersonationLevel=impersonate}!\\» & strComputer & «\root\cimv2»)
Set colPrinters = objWMIService. _
ExecNotificationQuery(«Select * from __instancemodificationevent » _
& «within 30 where TargetInstance isa ‘Win32_Printer'»)
i = 0
Do While i = 0
Set objPrinter = colPrinters.NextEvent
If objPrinter.TargetInstance.PrinterStatus <> _
objPrinter.PreviousInstance.PrinterStatus Then
Select Case objPrinter.TargetInstance.PrinterStatus
Case 1 strCurrentState = «Other»
Case 2 strCurrentState = «Unknown»
Case 3 strCurrentState = «Idle»
Case 4 strCurrentState = «Printing»
Case 5 strCurrentState = «Warming Up»
End Select
Select Case objPrinter.PreviousInstance.PrinterStatus
Case 1 strPreviousState = «Other»
Case 2 strPreviousState = «Unknown»
Case 3 strPreviousState = «Idle»
Case 4 strPreviousState = «Printing»
Case 5 strPreviousState = «Warming Up»
End Select
Wscript.Echo objPrinter.TargetInstance.Name _
& » is » & strCurrentState _
& «. The printer previously was » & strPreviousState & «.»
End If
Loop
Monitoring Print Job Status
Returns the job ID, user name, and total pages for each print job on a computer.
strComputer = «.»
Set objWMIService = GetObject(«winmgmts:» _
& «{impersonationLevel=impersonate}!\\» & strComputer & «\root\cimv2»)
Set colPrintJobs = objWMIService.ExecQuery _
(«Select * from Win32_PrintJob»)
Wscript.Echo «Print Queue, Job ID, Owner, Total Pages»
For Each objPrintJob in colPrintJobs
strPrinter = Split(objPrintJob.Name,»,»,-1,1)
Wscript.Echo strPrinter(0) & «, » & _
objPrintJob.JobID & «, » & objPrintJob.Owner & «, » _
& objPrintJob.TotalPages
Next
Monitoring Print Queues
Uses cooked performance counters to return the number of jobs currently in each print queue on a computer.
strComputer = «.»
Set objWMIService = GetObject(«winmgmts:» _
& «{impersonationLevel=impersonate}!\\» & strComputer & «\root\cimv2»)
Set colPrintQueues = objWMIService.ExecQuery _
(«Select * from Win32_PerfFormattedData_Spooler_PrintQueue Where » & _
«Name <> ‘_Total'»)
For Each objPrintQueue in colPrintQueues
Wscript.Echo «Name: » & objPrintQueue.Name
Wscript.Echo «Current jobs: » & objPrintQueue.Jobs
Next
Monitoring Print Queue Times
Identifies any print jobs that have been in the print queue for more than 15 minutes.
Const USE_LOCAL_TIME = True
Set DateTime = CreateObject(«WbemScripting.SWbemDateTime»)
strComputer = «.»
Set objWMIService = GetObject(«winmgmts:» _
& «{impersonationLevel=impersonate}!\\» & strComputer & «\root\cimv2»)
Set colInstalledPrinters = objWMIService.ExecQuery _
(«Select * from Win32_PrintJob»)
Wscript.Echo «Print Queue, Job ID, TimeSubmitted, Total Pages»
For Each objPrinter in colInstalledPrinters
DateTime.Value = objPrinter.TimeSubmitted
dtmActualTime = DateTime.GetVarDate(USE_LOCAL_TIME)
TimeinQueue = DateDiff(«n», actualTime, Now)
If TimeinQueue > 15 Then
strPrinterName = Split(objPrinter.Name,»,»,-1,1)
Wscript.Echo strPrinterName(0) & «, » _
& objPrinter.JobID & «, » & dtmActualTime & «, » & _
objPrinter.TotalPages
End If
Next
Monitoring the Print Service
Returns the status of the Spooler service (running, stopped, paused, etc.).
strComputer = «.»
Set objWMIService = GetObject(«winmgmts:» _
& «{impersonationLevel=impersonate}!\\» & strComputer & «\root\cimv2»)
Set colRunningServices = objWMIService.ExecQuery _
(«Select * from Win32_Service Where Name = ‘Spooler'»)
For Each objService in colRunningServices
Wscript.Echo objService.DisplayName & VbTab & objService.State
Next
Pausing a Printer
Pauses a printer named ArtDepartmentPrinter.
strComputer = «.»
Set objWMIService = GetObject(«winmgmts:» _
& «{impersonationLevel=impersonate}!\\» & strComputer & «\root\cimv2»)
Set colInstalledPrinters = objWMIService.ExecQuery _
(«Select * from Win32_Printer Where Name = ‘ArtDepartmentPrinter'»)
For Each objPrinter in colInstalledPrinters
ObjPrinter.Pause()
Next
Pausing Printers with Empty Print Queues
Pauses any printers that have no pending print jobs.
strComputer = «.»
Set objWMIService = GetObject(«winmgmts:» _
& «{impersonationLevel=impersonate}!\\» & strComputer & «\root\cimv2»)
Set colInstalledPrinters = objWMIService.ExecQuery _
(«Select * from Win32_Printer»)
For Each objPrinter in colInstalledPrinters
Set colPrintJobs = objWMIService.ExecQuery _
(«Select * from Win32_PerfFormattedData_Spooler_PrintQueue » _
& «Where Name = ‘» & objPrinter.Name & «‘»)
For Each objPrintQueue in colPrintJobs
If objPrintQueue.Jobs = 0 and objPrintQueue.Name <> «_Total» Then
objPrinter.Pause()
End If
Next
Next
Pausing Print Jobs
Pauses all the print jobs on a computer.
strComputer = «.»
Set objWMIService = GetObject(«winmgmts:» _
& «{impersonationLevel=impersonate}!\\» & strComputer & «\root\cimv2»)
Set colPrintJobs = objWMIService.ExecQuery _
(«Select * from Win32_PrintJob»)
For Each objPrintJob in colPrintJobs
objPrintJob.Pause
Next
Purging a Print Queue
Deletes all the print jobs for a printer named HP QuietJet.
strComputer = «.»
Set objWMIService = GetObject(«winmgmts:» _
& «{impersonationLevel=impersonate}!\\» & strComputer & «\root\cimv2»)
Set colInstalledPrinters = objWMIService.ExecQuery _
(«Select * from Win32_Printer Where Name = ‘HP QuietJet'»)
For Each objPrinter in colInstalledPrinters
objPrinter.CancelAllJobs()
Next
Receiving Notification When a Printer Stops
Checks the status for each printer on a computer, and issues an alert if any of these printers have stopped.
strComputer = «.»
Set objWMIService = GetObject(«winmgmts:» _
& «{impersonationLevel=impersonate}!\\» & strComputer & «\root\cimv2»)
Set colInstalledPrinters = objWMIService.ExecQuery _
(«Select * from Win32_Printer Where PrinterStatus = ‘1’ » _
& «or PrinterStatus = ‘2’»)
If colInstalledPrinters.Count = 0 Then
Wscript.Echo «All printers are functioning correctly.»
Else
For Each objPrinter in colInstalledPrinters
Wscript.Echo «Printer » & objprinter.Name & » is not responding.»
Next
End If
Renaming a Printer Published in Active Directory
Uses the MoveHere method to rename a published printer in an OU.
Set objOU = GetObject(«LDAP://ou=HR,dc=NA,dc=fabrikam,dc=com»)
objOU.MoveHere _
«LDAP://cn=Printer1,ou=HR,dc=NA,dc=fabrikam,dc=com», «cn=HRPrn1»
Reporting Print Queue Statistics
Returns total number of jobs, total number of pages, and largest job for all print queues on a computer.
strComputer = «.»
Set objWMIService = GetObject(«winmgmts:» _
& «{impersonationLevel=impersonate}!\\» & strComputer & «\root\cimv2»)
Set colPrintJobs = objWMIService.ExecQuery _
(«Select * from Win32_PrintJob»)
For Each objPrintJob in colPrintJobs
intTotalJobs = intTotalJobs + 1
intTotalPages = intTotalPages + objPrintJob.TotalPages
If objPrintJob.TotalPages > intMaxPrintJob Then
intMaxPrintJob = objPrintJob.TotalPages
End If
Next
Wscript.Echo «Total print jobs in queue: » & intTotalJobs
Wscript.Echo «Total pages in queue: » & intTotalPages
Wscript.Echo «Largest print job in queue: » & intMaxPrintJob
Resuming All Paused Printers
Resumes all the paused printers on a print server.
Const PRINTER_IS_PAUSED = 8
strComputer = «.»
Set objWMIService = GetObject(«winmgmts:» _
& «{impersonationLevel=impersonate}!\\» & strComputer & «\root\cimv2»)
Set colInstalledPrinters = objWMIService.ExecQuery _
(«Select * from Win32_Printer where ExtendedPrinterStatus = 8»)
For Each objPrinter in colInstalledPrinters
ObjPrinter.Resume()
Next
Resuming a Paused Printer
Resumes a paused printer.
strComputer = «.»
Set objWMIService = GetObject(«winmgmts:» _
& «{impersonationLevel=impersonate}!\\» & strComputer & «\root\cimv2»)
Set colInstalledPrinters = objWMIService.ExecQuery _
(«Select * from Win32_Printer Where Name = ‘ArtDepartmentPrinter'»)
For Each objPrinter in colInstalledPrinters
ObjPrinter.Resume()
Next
Resuming Print Jobs
Resumes all the print jobs on a computer.
strComputer = «.»
Set objWMIService = GetObject(«winmgmts:» _
& «{impersonationLevel=impersonate}!\\» & strComputer & «\root\cimv2»)
Set colPrintJobs = objWMIService.ExecQuery _
(«Select * from Win32_PrintJob»)
For Each objPrintJob in colPrintJobs
objPrintJob.Resume
Next
Retrieving Print Queue Statistics
Uses cooked performance counters to retrieve data such as total number of jobs printed and total number of printing errors for each print queue on a computer.
strComputer = «.»
Set objWMIService = GetObject(«winmgmts:» _
& «{impersonationLevel=impersonate}!\\» & strComputer & «\root\cimv2»)
Set colPrintQueues = objWMIService.ExecQuery _
(«Select * from Win32_PerfFormattedData_Spooler_PrintQueue Where » & _
«Name <> ‘_Total'»)
For Each objPrintQueue in colPrintQueues
Wscript.Echo «Name: » & objPrintQueue.Name
Wscript.Echo «Jobs: » & objPrintQueue.Jobs
Wscript.Echo «Current jobs spooling: » & objPrintQueue.JobsSpooling
Wscript.Echo «Maximum jobs spooling: » & objPrintQueue.MaxJobsSpooling
Wscript.Echo «Total jobs printed: » & objPrintQueue.TotalJobsPrinted
Wscript.Echo «NamJob errors: » & objPrintQueue.JobErrors
Wscript.Echo «Not ready errors: » & objPrintQueue.NotReadyErrors
Wscript.Echo «Out of paper errors: » & objPrintQueue.OutOfPaperErrors
Next
Searching for Specific Printers
Searches Active Directory for all printers with a priority of 2.
Const ADS_SCOPE_SUBTREE = 2
Set objConnection = CreateObject(«ADODB.Connection»)
Set objCommand = CreateObject(«ADODB.Command»)
objConnection.Provider = «ADsDSOObject»
objConnection.Open «Active Directory Provider»
Set objCOmmand.ActiveConnection = objConnection
objCommand.CommandText = «Select printerName, serverName from » _
& «‘LDAP://DC=fabrikam,DC=com’ where objectClass=’printQueue’ and » _
& » Priority = 2 »
objCommand.Properties(«Page Size») = 1000
objCommand.Properties(«Timeout») = 30
objCommand.Properties(«Searchscope») = ADS_SCOPE_SUBTREE
objCommand.Properties(«Cache Results») = False
Set objRecordSet = objCommand.Execute
objRecordSet.MoveFirst
Do Until objRecordSet.EOF
Wscript.Echo «Printer Name: » & objRecordSet.Fields(«printerName»).Value
Wscript.Echo «Server Name: » & objRecordSet.Fields(«serverName»).Value
objRecordSet.MoveNext
Loop
Transfering Print Jobs to a Different Print Queue
Changes the TCP/IP printer port for a logical printer, which has the net effect of transferring existing print jobs to the new printer port, and thus to a different printer.
strComputer = «.»
Set objWMIService = GetObject(«winmgmts:» _
& «{impersonationLevel=impersonate}!\\» & strComputer & «\root\cimv2»)
Set objPrinter = objWMIService.Get _
(«Win32_Printer.DeviceID=’ArtDepartmentPrinter'»)
objPrinter.PortName = «IP_192.168.1.10»
objPrinter.Put_
Updating Printer Locations
Uses ADSI to update the location attribute for all printers in a specified OU.
Set objOU = GetObject(«LDAP://OU=Finance, DC=fabrikam, DC=com»)
objOU.Filter = Array(«printqueue»)
For Each objPrintQueue In objOU
strNewLocation = «Redmond/» & objPrintQueue.Location
objPrintQueue.Put «Location» , strNewLocation
objPrintQueue.SetInfo
Next
Orige: http://www.activexperts.com/