
Не работает печать в Windows — очередь зависает и задания не удаляются
Проблемы с печатью в Windows — одна из самых частых причин обращений в техническую поддержку. Пользователь нажимает «Печать», документ попадает в очередь и... висит там бесконечно. Принтер не реагирует, удалить задание вручную не получается, а повторная отправка только увеличивает очередь. Знакомая ситуация? В этой статье мы подробно разберём причины зависания очереди печати, покажем пошаговые способы решения через PowerShell, CMD и графический интерфейс, а также дадим рекомендации по профилактике.
Почему зависает очередь печати
Служба диспетчера печати (Print Spooler) в Windows отвечает за приём заданий от приложений и передачу их на принтер. Когда что-то идёт не так, задания накапливаются в очереди и не могут быть обработаны. Основные причины:
- Повреждённый драйвер принтера — устаревшая или несовместимая версия драйвера вызывает сбой при обработке задания.
- Повреждённые файлы в очереди — файлы .spl и .shd в папке спулера могут быть повреждены из-за аварийного завершения работы.
- Конфликт сетевого принтера — недоступность сетевого принтера или принт-сервера блокирует всю очередь.
- Недостаточно прав — служба Spooler не может записать временные файлы из-за изменённых разрешений.
- Антивирус блокирует спулер — некоторые антивирусы перехватывают обращения к папке PRINTERS.
- Переполнение диска C: — спулеру не хватает места для создания временных файлов.
Экспресс-решение: перезапуск службы Spooler
Самый быстрый способ «оживить» печать — перезапустить службу диспетчера печати. Откройте PowerShell от имени администратора и выполните:
Restart-Service -Name Spooler -Force
Get-Service -Name Spooler | Select-Object Status, StartType
Вторая команда покажет текущее состояние службы. Если статус Running — служба работает. Однако простой перезапуск часто не помогает, потому что повреждённые файлы в очереди остаются на месте и снова вызывают сбой.
services.msc — найдите «Диспетчер печати» (Print Spooler) и перезапустите вручную.Полная очистка очереди печати через PowerShell
Надёжный способ — остановить службу, удалить все файлы из очереди и запустить службу заново. Вот проверенный скрипт:
# Останавливаем службу печати
Stop-Service -Name Spooler -Force
# Ждём полной остановки
Start-Sleep -Seconds 3
# Удаляем все файлы из папки спулера
Remove-Item -Path "C:\Windows\System32\spool\PRINTERS\*" -Force -ErrorAction SilentlyContinue
# Проверяем, что папка пуста
$remaining = Get-ChildItem "C:\Windows\System32\spool\PRINTERS" -ErrorAction SilentlyContinue
if ($remaining.Count -eq 0) {
Write-Host "Очередь печати успешно очищена" -ForegroundColor Green
} else {
Write-Host "ВНИМАНИЕ: не все файлы удалены, проверьте вручную" -ForegroundColor Yellow
}
# Запускаем службу обратно
Start-Service -Name Spooler
Get-Service -Name Spooler
Этот скрипт сначала принудительно останавливает Spooler, даёт 3 секунды на завершение всех процессов, затем удаляет содержимое папки C:\Windows\System32\spool\PRINTERS, где хранятся временные файлы заданий печати. Файлы с расширением .spl содержат данные документа, а .shd — метаданные задания.
Очистка очереди через командную строку (CMD)
Если PowerShell недоступен (например, заблокирован политиками), аналогичную операцию можно выполнить через CMD. Откройте командную строку от имени администратора:
net stop spooler
del /Q /F /S "%systemroot%\System32\spool\PRINTERS\*.*"
net start spooler
Команда net stop spooler останавливает службу, del с ключами /Q (без подтверждения), /F (принудительно) и /S (включая подкаталоги) удаляет все файлы. После этого net start spooler запускает службу заново.
Диагностика: поиск ошибок печати в журналах событий
Когда очередь очищена и служба работает, но проблема повторяется, нужно выяснить корневую причину. Журнал событий Windows содержит подробную информацию о сбоях печати:
# Последние 20 ошибок, связанных с печатью
Get-WinEvent -FilterHashtable @{
LogName = 'System'
ProviderName = 'Print'
Level = 2 # Error
} -MaxEvents 20 | Format-Table TimeCreated, Id, Message -AutoSize -Wrap
# Ошибки службы Spooler
Get-WinEvent -FilterHashtable @{
LogName = 'System'
ProviderName = 'Service Control Manager'
Level = 2
} -MaxEvents 50 | Where-Object {
$_.Message -like "*Spooler*" -or $_.Message -like "*печат*"
}
Обратите внимание на события с ID 372 (ошибка драйвера), 7031 (аварийное завершение службы) и 842 (невозможно подключиться к принтеру). Эти коды помогут точно определить источник проблемы.
Microsoft-Windows-PrintService/Operational — он содержит подробную информацию о каждом задании.Переустановка драйвера принтера
Если журнал указывает на проблему с драйвером (Event ID 372 или подобные), драйвер нужно переустановить. Сначала посмотрим, какие драйверы установлены:
# Список всех установленных драйверов принтеров
Get-PrinterDriver | Format-Table Name, PrinterEnvironment, MajorVersion -AutoSize
# Список принтеров и их портов
Get-Printer | Format-Table Name, DriverName, PortName, PrinterStatus -AutoSize
Для удаления проблемного драйвера:
# Удаляем конкретный принтер
Remove-Printer -Name "HP LaserJet Pro MFP M428"
# Удаляем драйвер (после удаления всех принтеров, использующих этот драйвер)
Remove-PrinterDriver -Name "HP Universal Printing PCL 6"
После удаления перезагрузите компьютер и установите свежую версию драйвера с сайта производителя. Рекомендуется использовать универсальные драйверы (Universal Print Driver) от HP, Xerox или Canon — они стабильнее специализированных версий.
Сброс подсистемы печати через реестр
В тяжёлых случаях, когда стандартные методы не помогают, можно выполнить полный сброс подсистемы печати. Это радикальный метод — все принтеры придётся добавлять заново:
# ВНИМАНИЕ: удаляет ВСЕ настройки принтеров!
Stop-Service -Name Spooler -Force
# Очистка ключей реестра с мониторами печати
$monitors = "HKLM:\SYSTEM\CurrentControlSet\Control\Print\Monitors"
Get-ChildItem $monitors | Where-Object {
$_.PSChildName -notin @(
"Local Port", "Standard TCP/IP Port",
"USB Monitor", "WSD Port"
)
} | Remove-Item -Recurse -Force
# Очистка процессоров печати (оставляем только стандартный)
$processors = "HKLM:\SYSTEM\CurrentControlSet\Control\Print\Environments\Windows x64\Print Processors"
Get-ChildItem $processors | Where-Object {
$_.PSChildName -ne "winprint"
} | Remove-Item -Recurse -Force
# Удаление всех сторонних драйверов
Remove-Item -Path "C:\Windows\System32\spool\PRINTERS\*" -Force
Remove-Item -Path "C:\Windows\System32\spool\drivers\x64\3\*" -Force -ErrorAction SilentlyContinue
Start-Service -Name Spooler
Checkpoint-Computer -Description "Before print reset".Автоматический скрипт мониторинга очереди
Чтобы проблема не застала врасплох, можно настроить автоматическую проверку очереди печати. Следующий скрипт проверяет зависшие задания и очищает очередь при необходимости:
# Скрипт мониторинга очереди печати
# Сохраните как C:\Scripts\Check-PrintQueue.ps1
$stuckJobs = Get-PrintJob -PrinterName * -ErrorAction SilentlyContinue |
Where-Object { $_.JobStatus -match 'Error|Offline|Paused' }
if ($stuckJobs.Count -gt 0) {
Write-Host "Обнаружено зависших заданий: $($stuckJobs.Count)" -ForegroundColor Red
# Логируем информацию
$logEntry = "$(Get-Date -Format 'yyyy-MM-dd HH:mm:ss') - Зависших заданий: $($stuckJobs.Count)"
Add-Content -Path "C:\Scripts\PrintQueue.log" -Value $logEntry
# Удаляем зависшие задания
$stuckJobs | ForEach-Object {
Remove-PrintJob -InputObject $_ -ErrorAction SilentlyContinue
Write-Host "Удалено задание: $($_.DocumentName) на $($_.PrinterName)"
}
# Если задания не удалились — полная очистка
$remaining = Get-PrintJob -PrinterName * -ErrorAction SilentlyContinue |
Where-Object { $_.JobStatus -match 'Error|Offline' }
if ($remaining.Count -gt 0) {
Stop-Service -Name Spooler -Force
Remove-Item "C:\Windows\System32\spool\PRINTERS\*" -Force
Start-Service -Name Spooler
$msg = "$(Get-Date) - Выполнена полная очистка спулера"
Add-Content -Path "C:\Scripts\PrintQueue.log" -Value $msg
}
} else {
Write-Host "Очередь печати в норме" -ForegroundColor Green
}
Для автоматического запуска добавьте задачу в планировщик:
# Создаём задачу в Task Scheduler (запуск каждые 30 минут)
$action = New-ScheduledTaskAction -Execute "PowerShell.exe" `
-Argument "-NoProfile -ExecutionPolicy Bypass -File C:\Scripts\Check-PrintQueue.ps1"
$trigger = New-ScheduledTaskTrigger -RepetitionInterval (New-TimeSpan -Minutes 30) `
-RepetitionDuration (New-TimeSpan -Days 365) -At "00:00"
$principal = New-ScheduledTaskPrincipal -UserId "SYSTEM" -RunLevel Highest
Register-ScheduledTask -TaskName "PrintQueueMonitor" -Action $action `
-Trigger $trigger -Principal $principal -Description "Мониторинг очереди печати"
Проблемы с сетевыми принтерами
Сетевые принтеры добавляют ещё один уровень сложности. Если принтер подключён через принт-сервер или напрямую по IP, проверьте сетевую доступность:
# Проверка доступности сетевого принтера
$printerIP = "192.168.1.100"
Test-Connection -ComputerName $printerIP -Count 4
# Проверка порта печати (обычно 9100 для RAW или 631 для IPP)
Test-NetConnection -ComputerName $printerIP -Port 9100
# Список всех портов принтеров
Get-PrinterPort | Format-Table Name, PrinterHostAddress, PortNumber -AutoSize
Если принтер доступен по сети, но печать не работает, проблема может быть в протоколе. Попробуйте пересоздать порт:
# Удаляем старый порт и создаём новый
Remove-PrinterPort -Name "IP_192.168.1.100" -ErrorAction SilentlyContinue
Add-PrinterPort -Name "IP_192.168.1.100" -PrinterHostAddress "192.168.1.100" -PortNumber 9100
Печать через групповые политики (GPO)
В доменной среде принтеры часто назначаются через групповые политики. Если принтер «пропал» после обновления политик, проверьте текущие назначения:
# Проверяем GPO, связанные с принтерами
gpresult /R /SCOPE COMPUTER | Select-String -Pattern "print" -Context 2
# Принудительное обновление политик
gpupdate /force
# Проверяем развёрнутые через GPO принтеры
Get-ChildItem "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Print\Connections" |
ForEach-Object {
[PSCustomObject]@{
Printer = $_.PSChildName
Server = (Get-ItemProperty $_.PSPath).Server
}
} | Format-Table -AutoSize
Распространённая проблема: политика назначает принтер с именем сервера, но DNS-имя сервера изменилось или сервер был мигрирован. В этом случае нужно обновить GPO с новым путём к принтеру.
Типичные ошибки и их решения
Рассмотрим наиболее частые ошибки при печати и способы их устранения:
- «Принтер в автономном режиме» — откройте свойства принтера, снимите галочку «Работать автономно». Если принтер сетевой — проверьте сетевое подключение.
- «Ошибка 0x00000709: невозможно установить принтер по умолчанию» — в реестре
HKCU\Software\Microsoft\Windows NT\CurrentVersion\Windowsустановите параметрLegacyDefaultPrinterModeв значение1. - «Драйвер принтера не установлен, ошибка 0x00000002» — запустите
sfc /scannowдля проверки системных файлов, затем переустановите драйвер. - «Не удаётся подключиться к принтеру, ошибка 0x0000011b» — связана с обновлением безопасности KB5005565. Решение: установите обновление на принт-сервер или добавьте ключ реестра
RpcAuthnLevelPrivacyEnabled=0вHKLM\System\CurrentControlSet\Control\Print. - «Подсистема печати недоступна» — служба Spooler остановлена или повреждена. Выполните
sfc /scannow, затемDISM /Online /Cleanup-Image /RestoreHealth.
Профилактика: как избежать проблем с печатью
Системные администраторы, работающие с десятками и сотнями рабочих мест, знают: профилактика дешевле лечения. Вот проверенные рекомендации:
- Обновляйте драйверы централизованно — используйте принт-сервер с актуальными драйверами. При подключении клиента драйвер установится автоматически.
- Настройте мониторинг — скрипт из раздела выше или специализированные системы мониторинга (Zabbix, PRTG) могут отслеживать состояние службы Spooler.
- Ограничьте размер очереди — через реестр можно установить максимальный размер спула, чтобы избежать переполнения диска.
- Используйте Print Management — консоль управления печатью (
printmanagement.msc) позволяет централизованно управлять принтерами, драйверами и очередями на всех серверах. - Регулярно очищайте временные файлы — включите задачу автоматической очистки папки спулера при запуске системы.
Заключение
Проблемы с печатью в Windows могут казаться тривиальными, но на практике они отнимают значительную часть времени системного администратора. Ключевые шаги при диагностике: очистить очередь, проверить журналы событий, обновить драйвер. Автоматизация мониторинга через PowerShell и планировщик задач позволяет обнаруживать и решать проблемы до того, как пользователи начнут жаловаться.
Если в вашей организации проблемы с печатью возникают регулярно — это сигнал о том, что инфраструктура печати нуждается в аудите. Устаревшие драйверы, неправильно настроенные принт-серверы и отсутствие мониторинга превращают простую задачу в хроническую головную боль.
Официальная документация: Microsoft Learn — Windows Server, Microsoft Learn — PowerShell
Часто задаваемые вопросы
Что такое Не работает печать в Windows — очередь зависает и задания не удаляются?
Не работает печать в Windows — очередь зависает и задания не удаляются — это важный аспект системного администрирования, который позволяет настроить и оптимизировать работу IT-инфраструктуры. В данной статье подробно рассматриваются все ключевые моменты.
Как правильно настроить Не работает печать в Windows — очередь зависает и задания не удаляются?
Для корректной настройки Не работает печать в Windows — очередь зависает и задания не удаляются необходимо следовать пошаговой инструкции, представленной в статье выше. Важно учитывать особенности вашей инфраструктуры и требования безопасности.
Какие типичные ошибки возникают при работе с Не работает печать в Windows — очередь зависает и задания не удаляются?
Наиболее частые ошибки при работе с Не работает печать в Windows — очередь зависает и задания не удаляются: некорректная конфигурация, недостаточные права доступа и несовместимость версий. Рекомендуем обратиться к специалистам ITFresh для профессиональной настройки.
ООО «АйТи Фреш» — возьмём это на себя
Настройка принт-серверов, диагностика проблем печати, централизованное управление драйверами и мониторинг — мы берём на себя всю рутину, чтобы ваши сотрудники просто нажимали «Печать» и получали результат.