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
编写一个批处理文件,您可以将其安排为夜间作业:
net stop spooler
DeleteOldQueuedFile.vbs
net start spooler
这在 Powershell 中应该相当简单。您会发现来自 *nix 的 powershell 更符合您的喜好。但是,您将使用 WMI,这确实是一种祝福和诅咒。
一些示例代码可以满足您的需求(未测试):
基本上,您只需要从 WMI 获取开始时间小于现在的所有对象 - 24 小时。
这可能是你的策略。停止后台处理程序服务,删除所有旧文件并重新启动服务。
将此脚本代码写入文本文件并将其命名为“DeleteOldQueuedFile.vbs”:
编写一个批处理文件,您可以将其安排为夜间作业:
如果您进入 Windows 2003 资源工具包,则有一个专门用于执行此操作的工具,称为 Cleanspl.exe。
资源工具包:mircosoft url /downloads/details.aspx?FamilyID=9D467A69-57FF-4AE7-96EE-B18C4790CFFD&displaylang=en
或者你可以编写脚本:
不确定当时接受的答案是否有效,但在 Server 2012 R2 和 2016 上它不再有效。
该属性现在是 TimeSubmitted,如果不从 WMI Timeobject 转换,则无法将其与 DateTime 进行比较。此外,由于重载,不能像在接受的答案中那样调用 Delete 方法。所以更新的版本将是: