
Не работает печать в Windows — очередь зависает и задания не удаляются
Зависшая очередь печати — это, пожалуй, самая раздражающая проблема в Windows. Пользователь жмёт «Печать», документ уходит в очередь и... исчезает там навсегда. Принтер молчит, задание не удаляется, а каждая повторная попытка только плодит новые записи в очереди. За 15 лет в IT-поддержке мы видели это сотни раз. В этой статье — конкретные способы решения через PowerShell, CMD и графический интерфейс, плюс несколько советов, чтобы эта история не повторялась.
Почему зависает очередь печати
Служба Print Spooler в Windows принимает задания от приложений и передаёт их на принтер. Звучит просто, но ломается регулярно. Когда что-то идёт не так — задания копятся в очереди мёртвым грузом. Вот что чаще всего за этим стоит:
- Повреждённый драйвер принтера — устаревшая или несовместимая версия драйвера вызывает сбой при обработке задания.
- Повреждённые файлы в очереди — файлы .spl и .shd в папке спулера разваливаются после аварийного выключения компьютера. Случается чаще, чем хотелось бы.
- Конфликт сетевого принтера — принт-сервер недоступен или принтер ушёл в оффлайн, и вся очередь намертво встаёт.
- Недостаточно прав — служба Spooler не может записать временные файлы из-за изменённых разрешений.
- Антивирус блокирует спулер — некоторые антивирусы перехватывают обращения к папке PRINTERS. Видели такое с корпоративными решениями — блокировка тихая, без единого предупреждения.
- Переполнение диска C: — спулеру просто некуда писать временные файлы. Особенно актуально для машин со старыми SSD на 120 ГБ.
Экспресс-решение: перезапуск службы 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.
Профилактика: как избежать проблем с печатью
Любой, кто обслуживал хотя бы пятьдесят рабочих мест, давно понял: разбирать пожар дольше и дороже, чем не допустить его. Вот что реально работает на практике:
- Обновляйте драйверы централизованно — держите на принт-сервере актуальные версии. Клиент подключается — драйвер ставится сам, без участия пользователя и без звонков в поддержку.
- Настройте мониторинг — PowerShell-скрипт из раздела выше или нормальная система мониторинга вроде Zabbix или PRTG прекрасно отслеживают состояние службы Spooler и бьют тревогу раньше, чем это сделают пользователи.
- Ограничьте размер очереди — через реестр выставляется максимальный размер спула. Диск от зависших заданий не забьётся, и спасибо себе скажете позже.
- Используйте Print Management — консоль
printmanagement.mscдаёт единое окно для управления принтерами, драйверами и очередями сразу на всех серверах. Очень удобно, когда парк большой. - Регулярно очищайте временные файлы — поставьте в планировщик задачу на автоматическую очистку папки спулера при старте системы. Один раз настроил — забыл.
Заключение
Проблемы с очередью печати выглядят несерьёзно — пока не начинаешь считать, сколько времени уходит на их разбор за месяц. Три шага, которые закрывают большинство ситуаций: очистить очередь, просмотреть журналы событий, обновить драйвер. Если добавить к этому мониторинг через PowerShell и планировщик задач, многие инциденты вы будете закрывать ещё до того, как пользователь успеет написать в чат.
Если принтеры у вас зависают каждые две недели — это уже не случайность, это симптом. Устаревшие драйверы, кривонастроенные принт-серверы, нулевой мониторинг — всё это вместе превращает банальную задачу в хроническую боль для всего офиса. Пора садиться и делать нормальный аудит инфраструктуры печати.
Официальная документация: Microsoft Learn — Windows Server, Microsoft Learn — PowerShell
Часто задаваемые вопросы
Что такое Не работает печать в Windows — очередь зависает и задания не удаляются?
Не работает печать в Windows — очередь зависает и задания не удаляются — это важный аспект системного администрирования, который позволяет настроить и оптимизировать работу IT-инфраструктуры. В данной статье подробно рассматриваются все ключевые моменты.
Как правильно настроить Не работает печать в Windows — очередь зависает и задания не удаляются?
Для корректной настройки Не работает печать в Windows — очередь зависает и задания не удаляются необходимо следовать пошаговой инструкции, представленной в статье выше. Важно учитывать особенности вашей инфраструктуры и требования безопасности.
Какие типичные ошибки возникают при работе с Не работает печать в Windows — очередь зависает и задания не удаляются?
Наиболее частые ошибки при работе с Не работает печать в Windows — очередь зависает и задания не удаляются: некорректная конфигурация, недостаточные права доступа и несовместимость версий. Рекомендуем обратиться к специалистам ITFresh для профессиональной настройки.
ООО «АйТи Фреш» — возьмём это на себя
Настройка принт-серверов, диагностика проблем печати, централизованное управление драйверами и мониторинг — мы берём на себя всю рутину, чтобы ваши сотрудники просто нажимали «Печать» и получали результат.
Комментарии