Como Limpar a Fila de Impressão no Windows Server via PowerShell (Do Básico ao Método Avançado)

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 pasta C:\Windows\System32\Spool\Printers, onde ficam os arquivos de spool (.SPL, .SHD e .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?

  1. Start-Sleep -Seconds 2: Dá tempo ao sistema operacional para liberar as conexões ativas na memória.
  2. Get-Process ... | Stop-Process -Force: Encerra na força os processos spoolsv, PrintFilterPipelineSvc e splwow64, liberando qualquer trava persistente em arquivos .TMP ou .SPL.
  3. -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.
  4. 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.

Rolar para cima