Excluir trabalhos de impressão antigos do Windows

1

Em nosso servidor de impressão primário do Windows 2003, compartilhamos cerca de 500 impressoras. Normalmente, temos cerca de 50 trabalhos de impressão presos. Embora longe do fim do mundo, isso me incomoda e eu acabo gastando 30 minutos por semana procurando e excluindo trabalhos emperrados.

O que eu realmente gostaria de ter é um script para excluir todos os trabalhos de impressão em todas as impressoras com mais de 24 horas.

Vindo de um ambiente UNIX, acho muito confuso o script do windows. Qualquer conselho sobre como eu posso começar com esta tarefa seria apreciado. Qualquer solução completa seria incrível. ;)

Felicidades,

Mat.

    
por Matthew 28.05.2009 / 22:38

3 respostas

5

Isso deve ser bastante simples de se fazer em Powershell. Você encontrará powershell um pouco mais ao seu gosto vindo do * nix. No entanto, você estará trabalhando com o WMI, que é verdadeiramente uma bênção e uma maldição.

Algum código de exemplo que faz o que você quer (NÃO TESTADO):

$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
}

Basicamente, você só precisa obter todos os objetos do WMI, onde a hora de início é menor do que agora - 24 horas.

    
por 28.05.2009 / 22:49
2

Essa pode ser sua estratégia. Pare o serviço de spooler, exclua todos os arquivos antigos e reinicie o serviço.

Escreva este código de script em um arquivo de texto e nomeie-o como "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

Escreva um arquivo de lote que você pode agendar como um trabalho noturno:

net stop spooler
DeleteOldQueuedFile.vbs
net start spooler
    
por 28.05.2009 / 23:23
1

Se você acessar o kit de recursos do Windows 2003, há uma ferramenta projetada para isso chamada Cleanspl.exe.

Resource Kit: mircosoft url /downloads/details.aspx?FamilyID=9D467A69-57FF-4AE7-96EE-B18C4790CFFD&displaylang=en

ou você pode fazer o script:

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
    
por 29.05.2009 / 04:04