Назад | Перейти на главную страницу

Удалить старые задания печати Windows

На нашем основном сервере печати 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