windows-pechat-ochered-zavisaet

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

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

Проблемы с печатью в Windows — одна из самых частых причин обращений в техническую поддержку. Пользователь нажимает «Печать», документ попадает в очередь и... висит там бесконечно. Принтер не реагирует, удалить задание вручную не получается, а повторная отправка только увеличивает очередь. Знакомая ситуация? В этой статье мы подробно разберём причины зависания очереди печати, покажем пошаговые способы решения через 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. Настройте мониторинг — скрипт из раздела выше или специализированные системы мониторинга (Zabbix, PRTG) могут отслеживать состояние службы Spooler.
  3. Ограничьте размер очереди — через реестр можно установить максимальный размер спула, чтобы избежать переполнения диска.
  4. Используйте Print Management — консоль управления печатью (printmanagement.msc) позволяет централизованно управлять принтерами, драйверами и очередями на всех серверах.
  5. Регулярно очищайте временные файлы — включите задачу автоматической очистки папки спулера при запуске системы.
Совет: В средах с большим количеством принтеров рассмотрите переход на Universal Print от Microsoft — облачную службу печати, которая упрощает управление и снижает нагрузку на локальные принт-серверы.

Заключение

Проблемы с печатью в Windows могут казаться тривиальными, но на практике они отнимают значительную часть времени системного администратора. Ключевые шаги при диагностике: очистить очередь, проверить журналы событий, обновить драйвер. Автоматизация мониторинга через PowerShell и планировщик задач позволяет обнаруживать и решать проблемы до того, как пользователи начнут жаловаться.

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

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

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

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

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

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

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

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

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

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

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

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

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