windows-pechat-ochered-zavisaet

Не работает печать в Windows — очередь зависает и задания не удаляются

Windows 24 марта 2026 10 мин чтения ...
ЕС
Евгений Семёнов
Генеральный директор ООО АйТи Фреш · 15+ лет в IT

Зависшая очередь печати — это, пожалуй, самая раздражающая проблема в Windows. Пользователь жмёт «Печать», документ уходит в очередь и... исчезает там навсегда. Принтер молчит, задание не удаляется, а каждая повторная попытка только плодит новые записи в очереди. За 15 лет в IT-поддержке мы видели это сотни раз. В этой статье — конкретные способы решения через PowerShell, CMD и графический интерфейс, плюс несколько советов, чтобы эта история не повторялась.

Почему зависает очередь печати

Служба Print Spooler в Windows принимает задания от приложений и передаёт их на принтер. Звучит просто, но ломается регулярно. Когда что-то идёт не так — задания копятся в очереди мёртвым грузом. Вот что чаще всего за этим стоит:

Экспресс-решение: перезапуск службы Spooler

Быстрее всего — перезапустить службу диспетчера печати. Открываем PowerShell от имени администратора и запускаем:

Restart-Service -Name Spooler -Force
Get-Service -Name Spooler | Select-Object Status, StartType

Вторая команда покажет состояние службы. Если видите Running — служба поднялась. Но честно говоря, простой перезапуск помогает редко: повреждённые файлы в очереди никуда не деваются и снова валят спулер.

Совет: Если перезапуск через PowerShell недоступен, можно использовать 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
Совет: Для сетевых принтеров предпочтительнее использовать протокол RAW (порт 9100) вместо LPR — он быстрее и стабильнее в Windows-окружении.

Печать через групповые политики (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 и прописываете актуальный путь к принтеру.

Типичные ошибки и их решения

Разберём ошибки, с которыми мы сталкиваемся чаще всего, и как их быстро закрыть:

Профилактика: как избежать проблем с печатью

Любой, кто обслуживал хотя бы пятьдесят рабочих мест, давно понял: разбирать пожар дольше и дороже, чем не допустить его. Вот что реально работает на практике:

  1. Обновляйте драйверы централизованно — держите на принт-сервере актуальные версии. Клиент подключается — драйвер ставится сам, без участия пользователя и без звонков в поддержку.
  2. Настройте мониторинг — PowerShell-скрипт из раздела выше или нормальная система мониторинга вроде Zabbix или PRTG прекрасно отслеживают состояние службы Spooler и бьют тревогу раньше, чем это сделают пользователи.
  3. Ограничьте размер очереди — через реестр выставляется максимальный размер спула. Диск от зависших заданий не забьётся, и спасибо себе скажете позже.
  4. Используйте Print Management — консоль printmanagement.msc даёт единое окно для управления принтерами, драйверами и очередями сразу на всех серверах. Очень удобно, когда парк большой.
  5. Регулярно очищайте временные файлы — поставьте в планировщик задачу на автоматическую очистку папки спулера при старте системы. Один раз настроил — забыл.
Совет: В средах с большим количеством принтеров рассмотрите переход на Universal Print от Microsoft — облачную службу печати, которая упрощает управление и снижает нагрузку на локальные принт-серверы.

Заключение

Проблемы с очередью печати выглядят несерьёзно — пока не начинаешь считать, сколько времени уходит на их разбор за месяц. Три шага, которые закрывают большинство ситуаций: очистить очередь, просмотреть журналы событий, обновить драйвер. Если добавить к этому мониторинг через PowerShell и планировщик задач, многие инциденты вы будете закрывать ещё до того, как пользователь успеет написать в чат.

Если принтеры у вас зависают каждые две недели — это уже не случайность, это симптом. Устаревшие драйверы, кривонастроенные принт-серверы, нулевой мониторинг — всё это вместе превращает банальную задачу в хроническую боль для всего офиса. Пора садиться и делать нормальный аудит инфраструктуры печати.

Официальная документация: Microsoft Learn — Windows Server, Microsoft Learn — PowerShell

Часто задаваемые вопросы

Что такое Не работает печать в Windows — очередь зависает и задания не удаляются?

Не работает печать в Windows — очередь зависает и задания не удаляются — это важный аспект системного администрирования, который позволяет настроить и оптимизировать работу IT-инфраструктуры. В данной статье подробно рассматриваются все ключевые моменты.

Как правильно настроить Не работает печать в Windows — очередь зависает и задания не удаляются?

Для корректной настройки Не работает печать в Windows — очередь зависает и задания не удаляются необходимо следовать пошаговой инструкции, представленной в статье выше. Важно учитывать особенности вашей инфраструктуры и требования безопасности.

Какие типичные ошибки возникают при работе с Не работает печать в Windows — очередь зависает и задания не удаляются?

Наиболее частые ошибки при работе с Не работает печать в Windows — очередь зависает и задания не удаляются: некорректная конфигурация, недостаточные права доступа и несовместимость версий. Рекомендуем обратиться к специалистам ITFresh для профессиональной настройки.

IT-аутсорсинг

ООО «АйТи Фреш» — возьмём это на себя

Настройка принт-серверов, диагностика проблем печати, централизованное управление драйверами и мониторинг — мы берём на себя всю рутину, чтобы ваши сотрудники просто нажимали «Печать» и получали результат.

12+лет на рынке
150+компаний обслуживаем
24/7поддержка

Комментарии