На нашем основном сервере печати Windows 2003 у нас есть около 500 принтеров. Обычно у нас около 50 зависших заданий на печать. Хотя это далеко не конец света, это меня чертовски беспокоит, и я, как правило, трачу 30 с лишним минут в неделю на поиск и удаление зависших вакансий.
Что мне действительно нужно, так это сценарий для удаления всех заданий на печать на всех принтерах старше 24 часов.
Исходя из опыта работы с UNIX, я нахожу создание сценариев Windows довольно запутанным. Буду признателен за любые советы о том, как я могу начать работу с этой задачей. Любые законченные решения были бы потрясающими. ;)
Привет,
Мат.
Это должно быть довольно просто сделать в Powershell. Вы найдете Powershell немного больше по своему вкусу от * nix. Однако вы будете работать с 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
}
По сути, вам просто нужно получить все объекты из WMI, где время начала меньше, чем сейчас - 24 часа.
Это может быть вашей стратегией. Остановите службу диспетчера очереди печати, удалите все старые файлы и перезапустите службу.
Запишите этот код сценария в текстовый файл и назовите его «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
Напишите командный файл, который вы можете запланировать как ночное задание:
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