删除旧的Windows打印作业

在我们主要的Windows 2003打印服务器上,我们共享大约500台打印机 我们通常有大约50个卡住的打印作业。 虽然离世界末日还有一段距离,但我最终每周花30多分钟的时间寻找和删除卡住的工作。

我真正想要的是一个脚本来删除24小时以前的所有打印机上的所有打印作业。

来自UNIX背景,我发现Windows脚本相当混乱。 任何有关如何开始这项任务的意见,将不胜感激。 任何完整的解决scheme将是惊人的 ;)

干杯,

垫。

这在Powershell中应该相当简单。 你会发现PowerShell更多一点,你喜欢来自* nix。 然而,你将会与WMI合作,这真是一个祝福和诅咒。

一些示例代码,做你想做的(未testing):

$strComputer = "." $PrintJobs = get-wmiobject -class "Win32_PrintJob" -namespace "root\CIMV2" -computername $strComputer | Where-Object { $_.StartTime -lt $($(Get-Date).addDays(-1)) } foreach ($job in $PrintJobs) { Write-Host "Canceling job $($job.JobId)" $job.Delete } 

基本上你只需要从开始时间less于24小时的WMI中获取所有对象。

这可能是你的策略。 停止后台打印程序服务,删除所有旧文件并重新启动服务。

将这个脚本代码写入一个文本文件并命名为“DeleteOldQueuedFile.vbs”:

 Dim Fso, Directory, Modified, Files Set Fso = CreateObject("Scripting.FileSystemObject") Set Directory = Fso.GetFolder("%systemroot%\system32\spool\printers") Set Files = Directory.Files For Each Modified in Files If DateDiff("D", Modified.DateLastModified, Now) >= 1 Then Modified.Delete Next 

写一个batch file,你可以安排为夜间工作:

 net stop spooler DeleteOldQueuedFile.vbs net start spooler 

如果你进入Windows 2003资源工具包,有一个工具可以做到这一点,称为Cleanspl.exe。

资源工具包:mircosoft url /downloads/details.aspx?FamilyID=9D467A69-57FF-4AE7-96EE-B18C4790CFFD&displaylang=en

或者你可以编写脚本:

 echo Printers - Shutting down the print spooler net stop "pcounter printer control" net stop "print spooler" echo Printers - Deleting print queues del c:\WINDOWS\system32\spool\PRINTERS\*.* /q net start "print spooler" net start "pcounter printer control" echo Printers - Print spooler Started