删除旧的 Windows 打印作业

Mat*_*hew 1 scripting windows printer

在我们的主要 Windows 2003 打印服务器上,我们共享大约 500 台打印机。我们通常有大约 50 个卡住的打印作业。虽然离世界末日还很远,但它让我很烦,我往往会每周花 30 多分钟来寻找和删除卡住的工作。

我真正想要的是删除所有打印机上超过 24 小时的所有打印作业的脚本。

来自 UNIX 背景,我发现 Windows 脚本编写非常混乱。任何关于我如何开始这项任务的建议将不胜感激。任何完整的解决方案都会令人惊叹。;)

干杯,

垫。

Kev*_*lby 6

这在 Powershell 中应该相当简单。您会发现来自 *nix 的 powershell 更符合您的喜好。然而,您将使用 WMI,这确实是一种祝福和诅咒。

一些可以执行您想要的操作的示例代码(未测试):

$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
}
Run Code Online (Sandbox Code Playgroud)

基本上,您只需要从 WMI 获取开始时间小于现在 - 24 小时的所有对象。