Quem administra servidores Windows sabe que, cedo ou tarde, a fila de impressão vai travar. Um documento corrompido ou uma perda temporária de conexão com a impressora pode fazer com que dezenas de trabalhos fiquem retidos, travando o serviço de impressão para todos os usuários da rede.
Neste artigo, vamos ver como resolver esse problema utilizando o PowerShell, evoluindo do método tradicional até uma solução para quando arquivos .TMP ou .SPL recusam-se a ser apagados.
O Método Básico: Reiniciando o Spooler e Apagando os Arquivos
Na maioria dos casos, basta parar o serviço do Spooler de impressão, limpar o diretório onde o Windows armazena os trabalhos pendentes e reiniciar o serviço.
Abra o PowerShell como Administrador e execute:
PowerShell
# 1. Para o serviço do Spooler
Stop-Service -Name Spooler -Force
# 2. Apaga todos os arquivos da pasta de Spool
Remove-Item -Path "$env:SystemRoot\System32\Spool\Printers\*" -Force -Recurse
# 3. Inicia o serviço novamente
Start-Service -Name Spooler
O que esses comandos fazem?
Stop-Service: Interrompe a execução do serviço de Spooler.Remove-Item: Deleta o conteúdo da pastaC:\Windows\System32\Spool\Printers, onde ficam os arquivos de spool (.SPL,.SHDe.TMP).Start-Service: Ativa novamente o serviço de impressão.
O Problema: “O arquivo está sendo usado por outro processo”
Eventualmente, ao tentar rodar o comando Remove-Item, você pode se deparar com um erro parecendo com este:
Remove-Item : Não é possível remover o item C:\Windows\System32\Spool\Printers\PPw0i5_a75mysjbc9ci60m905b.TMP: O processo não pode acessar o arquivo porque ele está sendo usado por outro processo.
Por que isso acontece?
Mesmo com o serviço do Spooler parado, o arquivo pode continuar travado por processos auxiliares de renderização ou isolamento de drivers do Windows, como o splwow64.exe (responsável por rodar drivers de 32-bits em sistemas 64-bits) ou o PrintFilterPipelineSvc.exe. Se um aplicativo travou durante a impressão, ele segura o manipulador (handle) do arquivo direto no Kernel.
O Método Avançado: Limpeza Forçada (Kill nos Processos de Isolamento)
Para resolver o problema sem precisar reiniciar o servidor, precisamos encerrar não apenas o serviço principal do Spooler, mas também os subprocessos de renderização de drivers que mantêm a trava nos arquivos .TMP.
Aqui está o script definitivo para resolver o problema:
PowerShell
# 1. Para o serviço do Spooler e aguarda o encerramento
Stop-Service -Name Spooler -Force
Start-Sleep -Seconds 2
# 2. Mata o Spooler e os processos de isolamento/renderização de driver
Get-Process -Name "spoolsv", "PrintFilterPipelineSvc", "splwow64" -ErrorAction SilentlyContinue | Stop-Process -Force
Start-Sleep -Seconds 2
# 3. Remove todos os arquivos da fila (ignorando erros pontuais)
Remove-Item -Path "$env:SystemRoot\System32\Spool\Printers\*" -Force -Recurse -ErrorAction SilentlyContinue
# 4. Inicia o serviço do Spooler novamente
Start-Service -Name Spooler
# 5. Verifica se a pasta ficou completamente limpa
Get-ChildItem -Path "$env:SystemRoot\System32\Spool\Printers"
Por que esse script funciona?
Start-Sleep -Seconds 2: Dá tempo ao sistema operacional para liberar as conexões ativas na memória.Get-Process ... | Stop-Process -Force: Encerra na força os processosspoolsv,PrintFilterPipelineSvcesplwow64, liberando qualquer trava persistente em arquivos.TMPou.SPL.-ErrorAction SilentlyContinue: Garante que o script continue a execução sem interromper o fluxo mesmo se algum processo específico já não estiver rodando.Get-ChildItem: Serve como uma validação final. Se o resultado retornado for em branco, sua fila está 100% limpa e operacional.
Conclusão
Ter um script como esse guardado na sua biblioteca de ferramentas do PowerShell economiza minutos valiosos de downtime e evita ter que reiniciar um servidor inteiro por conta de uma impressão travada.
