在我们主要的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