Отключается служба печати Windows 10

Что делать, если «спулер» сильно грузит процессор

Многие пользователи разных версий «Виндовс» часто жалуются на то, что процесс «spooler» сильно грузит процессор. Проблема станет более острой, когда загрузка начинает доходить за отметку в 80 процентов. Это действительно нетипичная ситуация и такой загрузки быть не должно. Рассмотрим возможные причины и их быстрое самостоятельное решение.

  • Большая очередь из заданий на печать или файлы очень большого размера. Просто очищаем список заданий и разбиваем большой файл на несколько частей соответственно.
  • В перечне принтеров много моделей, которые вообще или очень редко используются. Их лучше удалить, так как службе печати приходится постоянно их «мониторить», что вызывает дополнительную нагрузку.
  • Устаревший или «битый» драйвер сам может негативно воздействовать и потреблять много ресурсов. В такой случае переустановка неизбежна.

Переустановка всей службы отдельно от операционной системы невозможна. Для возобновления ее корректной работы Вы можете только попытаться выполнить выше перечисленные действия.

Какая причина была у Вас?

  • Непонятно * 50%, 1 голос 1 голос 50% 1 голос — 50% из всех голосов
  • Драйвера 50%, 1 голос 1 голос 50% 1 голос — 50% из всех голосов
  • Просто была остановлена служба 0%, 0 голосов голосов 0 голосов — 0% из всех голосов
  • Вирусы 0%, 0 голосов голосов 0 голосов — 0% из всех голосов
  • Много заданий в очереди печати 0%, 0 голосов голосов 0 голосов — 0% из всех голосов

Автоочистка и перезагрузка службы печати принт-сервера

Короткий но полезный скрипт для админов. Имеется принтсервер с 34 принтерами, и у него происходят застревания в очереди печати, обычно это происходит когда принтер отдела отправлен в ремонт, а другой отдел хочет им отправить документ на не существующий принтер. Загрузка процессора поднимается и может достигнуть 100%.

Получив несколько раз такую ситуацию, и обнаружив что принтсервер может простоять с загрузкой процессора 30-50% неделю(!) до тех пока это не увидит админ. Чтобы решить эту проблему и разгрузить персонал был набросан небольшой скрипт, он крайне прост и у него много аналогов, выложить сюда я его решил поскольку он снова и снова, доказывает свою полезность.

Отключается служба печати Windows 10

У нас сломалось три принтера подряд, мы сняли их на ремонт, а пользователи других отделов продолжали слать задания в очередь, в результате автоочистка и перегрузка службы печати избавила нас от работы в тот момент когда мы были заняты ремонтом физической техники.

для того чтобы снять нагрузку с процессора нужно очистить задания печати в каталоге C:WindowsSystem32spoolPRINTERS просто удаляются все файлы в каталоге при остановленной службе:

Get-Service *spool* | Stop-Service -Force -Verbose
Start-Sleep -Seconds 5
$path = "C:WindowsSystem32spoolPRINTERS"
Get-ChildItem $path -File | Remove-Item -Force -Verbose
Get-Service Spooler | Start-Service -Verbose

Для административного оповещения предварительно сохраняем — кто, какой документ, какого размера и куда печатал. Заодно пример как создавать объекты.

# получаем список заданий со всех принтеров в системе на этот момент
$temp = Get-Printer | Get-PrintJob

# создаем пустой список объектов
$Jobs = @()

# перебирем все объекты заданий печати чтобы сформировать полноценный объект
foreach ( $p in $temp ) {
# ниже применяется свойство [ordered] позволяющее зафиксировать порядок в свойствах
# объекта обычно пошик создает свойства в произвольном порядке
# этого указателя нет в старом пошике, поэтому если получаете ошибку просто 
# удалите ее она нужна больше для людей - когда ведешь вывод в консоль
# в данном случае она нужна чтобы зафиксировать порядок колонок в html письма
$props = [ordered]@{    ID = $p.Id
                            PrinterName = $p.PrinterName
                            UserName = $p.UserName
                            DocumentName = $p.DocumentName
                            DataType = $p.Datatype
                            SubmittedTime = $p.SubmittedTime
                            Size = $p.Size
                            JobTime = $p.JobTime
                            PagesPrinted = $p.PagesPrinted
                            TotalPages = $p.TotalPages
                            Status = $p.Status
                }
# создаем еденичный объект с значениями из переменной $props
$obj = New-Object -TypeName PSObject -Property $props

# добавляем в список объекта
$Jobs  = $obj
}

# на выходе имеем полноценные объекты
$Jobs

При работе желательно создавать объекты.

Мы хотим иметь диагностическое инфо на момент перезагрузки спулера для этих целей добавим список процессов с загрузкой по процессору и памяти:

# дергаем запущенные процессы
$temp = Get-Process | sort -Property cpu -Descending

# объявляем пустой список объектов
$proc = @()

foreach ( $p in $temp ) {
# заполняем свойства будущего объекта
$props = [ordered]@{    Name=$p.ProcessName
                        CPU_total_in_seconds=$p.CPU
                        PhysicallMemory_in_Mb=$p.WS/1mb
                        ProcessID=$p.Id
                }
# создаем объект из свойств
$obj = New-Object -TypeName PSObject -Property $props

# добавляем его в список объектов
$proc  = $obj
}

$proc

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

# счетчик загрузки, если загрузка больше чем 95 то инкремент
$cfi = 0
for( $i=1; $i -le 5; $i   ) {
Start-Sleep -Seconds 1
# подгружаем загрузку процессора
$load = Get-WmiObject win32_Processor | select -Property LoadPercentage
Write-Host "CPU load $load" -ForegroundColor Green

if ($($load.LoadPercentage) -gt 95) { 
$cfi = $cfi   1
Write-Host "indicator is $cfi" -ForegroundColor Green
}
}

Скрипт нужно добавить в шедулер на запуск каждые 5-10 минут.

Для отправки письма мы используем с небольшими изменениями метод описанный здесь.

Отправка почты вынесена в отдельную функцию, т.к. она используется в других местах, вам нужно поменять адрес почтового сервера ‘SMTPServer’=’Exchange.domain.ru’ на ваш сервер вот в этом месте:

$params = @{'To'=$MailAddress
           'From'='bot@domain.local'
           'Subject'="$Subject $Date"
           'Body'=$MailBody
           'BodyAsHTML'=$True
           'SMTPServer'='Exchange.domain.ru'
           }
Send-MailMessage @params -Encoding $encoding

И заменить адрес

admin@domain.ru

на адрес на который должно уходить административное оповещение вот здесь:

Send-ToAdmin -MailAddress 'admin@domain.ru' -Style $Style -Subject 'Сервер печати - процессор загружен на 100%' -Body $Body -Header1 $header

В первоначальной редакции скрипт умел извлекать DLL загруженные в память для каждого процесса для того чтобы выловить «глючный» драйвер. в данной редакции убран т.к. генерирует слишком большое количество инфо, был реализован через

ListDll

, но генерировал очень большой список.

Полный код скрипта:

<#
смотрит за спулером, чистит очередь и перегружает службу
дополнение отправка уведомления на почту
#>
$StyleYellowSimple = @'
<style>
body { background-color:#ffffff;
       font-family:Tahoma;
       font-size:12pt; }
td, th { border:1px solid black;
         border-collapse:collapse; }
th { color:white;
     background-color:black; }
     table, tr, td, th { padding: 2px; margin: 0px }
table { font-family: "Lucida Sans Unicode", "Lucida Grande", Sans-Serif;
        font-size: 14px;
        border-radius: 10px;
        border-spacing: 0;
        text-align: center; }
th { background: #BCEBDD;
     color: white;
     text-shadow: 0 1px 1px #2D2020;
     padding: 10px 20px; }
th, td { border-style: solid;
         border-width: 0 1px 1px 0;
         border-color: white; }
th:first-child, td:first-child { text-align: left; }
th:first-child { border-top-left-radius: 10px; }
th:last-child { border-top-right-radius: 10px;
                border-right: none; }
td { padding: 10px 20px;
     background: #F8E391; }
tr:last-child td:first-child { border-radius: 0 0 0 10px; }
tr:last-child td:last-child { border-radius: 0 0 10px 0; }
tr td:last-child { border-right: none; }
</style>
'@

<#
    отправляет письмо на указанный адрес с оповещением.
    для использования в других частях скриптов
#>
function Send-ToAdmin
{
Param ( [string]$MailAddress = 'admin@domain.ru',
        [string]$Subject = 'Test message',
        [string]$Header1,
        [string]$Body,
        [string]$Style
    )
BEGIN {}
PROCESS {
    
    Write-Verbose 'definiting CSS'

<#    Switch ($Style)
    {
        'YellowSimple' { $head = $StyleYellowSimple; break }
        'BlueSimple' { $head = $StyleBlueSimple; break }
        'DataTable' {$head = $StyleResposTable; break }
        default { $head = $StyleYellowSimple; break }
    }#>
    $head = $StyleYellowSimple
    $encoding = [System.Text.Encoding]::UTF8
    
    $Date = Get-Date
    $MailBody = ConvertTo-HTML -head $head -PostContent $Body -PreContent "<h1>$Subject. Date:$Date</h1><br><h3>$Header1</h3>" | Out-String
    
    Write-Verbose "Sending e-mail. Address: $MailAddress"

    $params = @{'To'=$MailAddress
               'From'='bot@domain.local'
               'Subject'="$Subject $Date"
               'Body'=$MailBody
               'BodyAsHTML'=$True
               'SMTPServer'='Exchange.domain.ru'
               }

    Send-MailMessage @params -Encoding $encoding
}
END{}
}

$cfi = 0
for( $i=1; $i -le 5; $i   ) {
    Start-Sleep -Seconds 1
    $load = Get-WmiObject win32_Processor | select -Property LoadPercentage

    Write-Host "CPU load $load" -ForegroundColor Green

    if ($($load.LoadPercentage) -gt 95) { 
        $cfi = $cfi   1
        Write-Host "indicator is $cfi" -ForegroundColor Green
    }
}

if ($cfi -gt 2) {
    # дергаем процессы для инфо
    $temp = Get-Process | sort -Property cpu -Descending

    $proc = @()
    foreach ( $p in $temp ) {
        $props = [ordered]@{    Name=$p.ProcessName
                                CPU_total_in_seconds=$p.CPU
                                PhysicallMemory_in_Mb=$p.WS/1mb
                                ProcessID=$p.Id                                                           
                        }

        $obj = New-Object -TypeName PSObject -Property $props
 
        $proc  = $obj
    }

    $temp = Get-Printer | Get-PrintJob
    
    $Jobs = @()
    foreach ( $p in $temp ) {
        $props = [ordered]@{    ID = $p.Id
                                PrinterName=$p.PrinterName
                                UserName=$p.UserName
                                DocumentName=$p.DocumentName
                                DataType=$p.Datatype
                                SubmittedTime=$p.SubmittedTime
                                Size=$p.Size
                                JobTime=$p.JobTime
                                PagesPrinted=$p.PagesPrinted
                                TotalPages=$p.TotalPages
                                Status=$p.Status
                        }

        $obj = New-Object -TypeName PSObject -Property $props
 
        $Jobs  = $obj
    }

    # перегружаем спулер тут
    Write-Host "Перегружаем спулер" -ForegroundColor Green
     
    Get-Service *spool* | Stop-Service -Force -Verbose
    Start-Sleep -Seconds 5
    $path = "C:WindowsSystem32spoolPRINTERS"
    Get-ChildItem $path -File | Remove-Item -Force -Verbose
    Get-Service Spooler | Start-Service -Verbose

    $frag1 = $proc | ConvertTo-Html -As table -Fragment -PreContent '<h2>Процессы в памяти перед перезагрузкой спулера</h2>' | Out-String
    $frag2 = $Jobs | ConvertTo-Html -As table -Fragment -PreContent '<h2>Задания печати из всех очередей всех принтеров</h2><br>если есть список то скорее всего задание зависло (принтер отключен)' | Out-String

    $Body = '<br><br>служба сервера была перезагружена т.к. процессор был слишком сильно нагружен<br><br>'
    $Body = $Body   $frag2   '<br><br>'
    $Body = $Body   $frag1   '<br><br>---------------------------------------------------------------------------<br>дополнительная отладочная информация<br><H2>список загруженных библиотек в памяти на момент зависания по каждому процессу</H2>'

    $Date = Get-Date 
    $header = "$Date сервер печати"

    $Style = 'YellowSimple'
    Send-ToAdmin -MailAddress 'admin@domain.ru' -Style $Style -Subject 'Сервер печати - процессор загружен на 100%' -Body $Body -Header1 $header
}

Скрипт нужно добавить в шедулер на запуск каждые 5-10 минут.

:/>  Как установить аватар (изображение пользователя) в Windows 10 |

Ссылка на альтернативный скрипт

Все ответы

Принтер случаем не HP с подключением по USB?

Попробуйте в свойствах принтера отключить галку Двунаправленный обмен и/или Расширенные возможности печати.

21 июля 2021 г. 16:40 Ответить | Цитировать

Если у вас несколько принтеров скорее всего у вас разница в отправлении задач печати.

1. начните пробовать с какой именно верисии ОС у вас не получается распечатать.

Если Вам помог чей-либо ответ, пожалуйста, не забывайте жать на кнопку «Предложить как ответ» или «Проголосовать за полезное сообщение» Мнения, высказанные здесь, являются отражение моих личных взглядов, а не позиции корпорации Microsoft. Вся информация предоставляется «как есть» без каких-либо гарантий.

27 июля 2021 г. 7:34 Ответить | Цитировать

Так же попробуйте на чистой системе добавлять по одному принтеру до момента когда начнет падать spooler

Тут проблема может быть или в кривом взаимодействии службы и драйвера (тогда нужно искать проблемный и обновлятьискоренять) или в кривой ОС (вероятнее первый вариант, но если таки второй то дисм должен или помочь или указать на проблему)

The opinion expressed by me is not an official position of Microsoft

  • Изменено 2 августа 2021 г. 13:38
  • Помечено в качестве ответа 11 августа 2021 г. 11:34

2 августа 2021 г. 13:34 Ответить | Цитировать

Владельцы принтеров поймут как это, когда ты постоянно вынужден «бороться» с печатью: то краска засохнет или закончиться, то бумагу зажует, а то и, что намного хуже, возникнут непредвиденные проблемы с программным обеспечением. Конечно, всё это случается не сразу, ведь некоторое время всё работает как надо, но согласитесь, что когда после нескольких сотен удачных печатей вдруг начинает отключаться сам по себе диспетчер печати – всё становится очень грустно.

Высокая нагрузка и нестабильность драйверов в терминальной среде.

Нестабильная работа драйверов и, соответственно, перегрузка ими диспетчера очереди печати (по русски – «спулера») вызывала (и будет вызывать, если не чего не делать), остановку всего процесса печати на сервере, а иногда и остановку (зависание) ОС сервера в целом.

До выхода Windows Server 2008, штатных средств по оптимизации нагрузки спулера в ОС Windows Server не было.

Поэтому единственным адекватным методом борьбы с регулярным зависанием спулера (и соответственно, массовыми звонками в тех. поддержку от разгневанных пользователей), был bat-ник, по расписанию превентивно перезапускающий процесс spoolsv.exe (например, утром и в обеденное время), освобождая спулер от висящих запросов и очередей.

С выходом Windows Server 2008 и Windows 7 появилась возможность изоляции драйверов принтера. Данная возможность позволяет драйверу принтера подгружать задачи не в Spoolsv.exe, а специальный под-процесс PrintIsolationHost.exe.

При такой конструкции, зависание драйвера одного принтера, не вешает всю очередь печати, поскольку встает только один под-процесс PrintIsolationHost.exe, а сам процесс спулера spoolsv.exe остается работоспособным.

Теперь пару слов о настройке. Диспетчер печати по умолчанию выполняет драйверы печати в изолированном процессе. Изменить можно при помощи групповой политики, параметр «Выполнять драйверы принтеров в изолированных процессах» .

Также важен еще один параметр групповой политики это – «Переопределить параметр совместимости выполнения драйвера печати«

Для того чтобы включить изоляцию драйверов принтеров, нужно использовать редактор локальной групповой политики (gpedit.msc):

Откройте gpedit.msc и последовательно перейдите:

Диспетчер очереди печати spoolsv.exe сильно грузит процессор

В штатном режиме Диспетчер очереди печати работает очень тихо и не привлекает к себе лишнего внимания.

Нагрузка на процессор должна равняться нулю, а объем используемой оперативной памяти не должен превышать лишь пары мегабайт. Spoolsv.

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

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

В определенных сценариях нагрузка не падает и spoolsv.exe начинает сильно грузить процессор на протяжении долгого времени. Зачастую причина спрятана где-то в системе печати Windows, что вполне очевидно. Проблема может заключатьяс в чрезмерно большой очереди на печать (много файлов поставлены на печать), забагованных драйверах принтера или неправильной конфигурации последнего.

Первым делом попробуйте обратиться к встроенной системе устранения неполадок. Нажмите Win I и перейдите в раздел Обновление и безопасность – Устранение неполадок.

В самом первом списке найдите Принтер, нажмите на него, а затем на Запустить средство устранения неполадок. Следуйте всем инструкциям и указаниям мастера. После завершения работы средства проследите за работой Диспетчера очереди печати. Если он перестал грузить процессор, тогда проблема решена. Если нет, читайте эту инструкцию дальше.

Второй вариант – проверка очереди печати.

  1. Откройте Параметры (клавиатурное сокращение Win I, либо любой другой удобный вам способ), а затем Устройства – Принтеры и сканеры.
  2. В списке доступных принтеров и сканеров найдите тот, что в данный момент подключен к вашему компьютеру (физический принтер). Нажмите на него, а затем на Открыть очередь.
  3. Проверьте, нет ли в очереди большого количества файлов. Если да, тогда нажмите в верхнем меню Принтер и затем Очистить очередь печати. Повторите эту процедуру для всех остальных принтеров, включая виртуальные (Факс, Microsoft Print to PDF, Microsoft XPS Document Writer и Send to OneNote 2021).

Третья опция – перезапуск самой службы. Возможно, система просто столкнулась с багом, поэтому перезапуск службы печати теоретически может исправить проблемы с нагрузкой.

  1. Нажмите Win R (команда «Выполнить») и введите services.msc.
  2. В списке найдите службу Диспетчер печати. Кликните на нее, а затем в левой части нажмите на Перезапустить службу.
  3. После перезапуска службы откройте Диспетчер задач и понаблюдайте за spoolsv.exe.
:/>  Как задать, скопировать и восстановить NTFS разрешения с помощью ICACLS? | Windows для системных администраторов

Если и третий метод не помог, тогда удалите принтер из Параметров Windows. Для этого в разделе Параметры – Устройства – Принтеры и сканеры нажмите на нужный принтер и выберите Удалить устройство.

После этого кликните на Добавить принтер или сканер и следуйте указаниям системы для повторного добавления принтера в систему. Есть смысл также попробовать удалить драйвер принтера и установить его обратно, либо установить предыдущую или более новую версию.

Быть может, свежее или предыдущее ПО не имеет багов, причиняющих высокую нагрузку на процессор Диспетчером очереди печати.

Исключаем влияние вирусов

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

Для этого, перед проверкой системы обновите базы вашей антивирусной программы. Если антивирус не установлен, то из всего разнообразия защитных программ советуем воспользоваться антивирусом Kaspersky, Dr.Web или Avira. Данные антивирусные ПО хорошо себя зарекомендовали и отлично справляются со своими задачами. Хоть они и платные, но доступен тестовый период.

Инициировать проверку системы можно двумя способами. Первый- из интерфейса самой антивирусной программы.

Второй – проверка конкретного локального диска, на котором установлена операционная система. Как правило, им является диск «C». Для этого открываем «Мой компьютер», выбираем диск «C» и нажав правой клавиши мыши по его ярлыку, выбираем соответствующий пункт.

В целом нас должна интересовать целостность библиотек и файлов, таких как sfc_os.dll, sfcfiles.dll, sfc.dll, sfc.exe, расположенных в папке WINDOWSsystem32. В случае их повреждения или отсутствия, можно воспользоваться их резервными копиями. Адрес резервных копий в Windows XP -WINDOWSsystem32DllCache, в Windows 7 — Windowswinsxs.

Обычный способ

  1. Откройте «Панель управления» (в «Виндовс» 10 лучше действовать не через «Параметры», а через «Классическое приложение») и вкладку «Устройства и принтеры».
  2. Выберите подключенный принтер и кликните по его значку вспомогательной кнопкой мыши.
  3. Здесь нужно нажать «Просмотр очереди печати».

    Просмотр очереди печати

  4. Кликните крайний раздел «Принтер» и укажите «Очистить очередь».

    Очистить очередь

Очистка реестра от старых принтеров

Итак, нашу очистку мы начнем  с системного реестра.

Буте внимательны, выполняя дальнейшие действия Вы удалите из системы все установленные принтеры, поэтому, после окончания процедуры очистки, нужно будет установить принтер и драйвера заново.

Так же, перед выполнением последующих рекомендаций,  отключите принтер от компьютера.

В окне «Выполнить» прорисуем команду regedit, которая вызовет окно реестра.

Первым шагом будет проверка компонентов от которых зависит служба  spooler, для этого переходим к  ветке  HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesSpooler, где для параметра DependOnService, должно быть указано значение RPCSS.

Далее, удаляем все печатающие устройства которые есть в системе. Переходим по ветке HKEY_LOCAL_MACHINESystemCurrentControlSetControlPrintPrinters, где нажав на стрелочку появится весь список принтеров. Для их удаления мы можем воспользоваться клавишей «Delet»

Вторым пунктом, является очистка от всех драйверов. Развернув ветку KEY_LOCAL_MACHINESystemCurrentControlSetControlPrintEnvironmentsWindowsNTx86DriversVersion-3 ( в х64 битных операционных системах нужно открыть …EnvironmentsWindows NTx64DriversVersion-3) удаляем весь перечень драйверов установленных в системе.

В ветке HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlPrintMonitors, список записей должен выглядеть следующим образом.

  • BJ Language Monitor
  • Local Port
  • PJL Language Monitor
  • Standard TCP/IP Port
  • USB Monitor

Все остальное удаляем.

На этом работа с реестра окончена, теперь переходим к очистке папки Spool

Параметры net stop

Команда NET STOP останавливает одну из служб Windows. Синтаксис следующий — NET STOP [служба], где [служба] — может быть одной из следующих служб:

  • BROWSER — Обозреватель компьютеров;
  • DHCP — DHCP-клиент;
  • EVENTLOG — Журнал событий;
  • MESSENGER — Служба сообщений;
  • NETLOGON — Сетевой вход в систему;
  • NTLMSSP — Поставщик поддержки безопасности NT LM;
  • RASMAN — Диспетчер подключений удаленного доступа;
  • REMOTEACCESS — Маршрутизация и удаленный доступ;
  • RPCLOCATOR — Локатор удаленного вызова процедур (RPC);
  • RPCSS — Удаленный вызов процедур (RPC);
  • SCHEDULE — Планировщик заданий;
  • SERVER — Сервер;
  • SPOOLER — Диспетчер очереди печати;
  • LMHOSTS — Поддержка NetBIOS через TCP/IP;
  • UPS — Источник бесперебойного питания;
  • WORKSTATION — Рабочая станция.

Остановка одной из служб системы Windows может привести к отключению сетевых соединений используемых этой службой. Kроме того, некоторые службы зависят от других служб. Kоманда NET STOP может также использоваться для остановки служб не входящих в состав Windows.

Синтаксис команды довольно простой, нужно лишь ознакомиться с ее параметрами и запомнить имена некоторых служб.

Переходим к практике

Чтобы не загромождать статью, я не буду приводить кучу проверок (на то, что компьютер доступен, что у нас есть доступ к WMI и т.д.).

Итак, для начала нам нужно узнать путь к очереди печати, т.е. посмотреть значение реестра удалённого компьютера. Для этого используем .NET класс RegistryKey.

Для того, чтобы подключиться к реестру удалённого компьютера используем метод OpenRemoteBaseKey, передав ему в качестве параметров имя компьютера и раздел реестра:

$ServerKey = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey( [Microsoft.Win32.RegistryHive]::LocalMachine, $ComputerName)

$Key = $ServerKey.OpenSubKey(‘SYSTEMCurrentControlSetControlPrintPrinters’)

Переменная $Key содержит весь подраздел Printers (на скриншоте выше). Нам из этого раздела нужно только одно значение:

$DefaultSpoolDirectory = $Key.GetValue(‘DefaultSpoolDirectory’)

Переменная $DefaultSpoolDirectory содержит тот самый путь к файлам очереди печати:

PS C:> $DefaultSpoolDirectoryC:WINDOWSSystem32spoolPRINTERS

Отлично! Вот только появляется новая проблема: это локальный путь – по этому пути к удалённому компьютеру мы не доберёмся. Нужно преобразовать его в UNC-путь, т.е. из пути

C:WINDOWSsystem32spoolPRINTERS

получить путь

ComputerNameC$WINDOWSsystem32spoolPRINTERS

Это можно сделать простой манипуляцией со строкой:

$RemoteDefaultSpoolDirectory = ‘’ $ComputerName ” $DefaultSpoolDirectory[0] ‘$’ $DefaultSpoolDirectory.Substring(2)

Т.е. просто дописываем в строку (наш локальный путь) недостающие символы.

Теперь всё готово, можем останавливать службу и очищать очередь печати.

Останавливаем службу печати:

# Получаем службу$Service = Get-WmiObject Win32_Service @PSBoundParameters # Останавливаем службу$Service.StopService()

На всякий случай поясню – в данном случае при обращении к WMI используется сплаттинг, если такая форма кажется незнакомой и пугающей рекомендую почитать соответствующую статью, или воспользоваться более привычной формой:

$Service = Get-WmiObject Win32_Service ` -Filter «name = ‘spooler’» ` -ComputerName $ComputerName

После остановки службы можно очищать очередь печати, но как известно аппетит приходит во время еды, и мне захотелось ещё посмотреть на то, сколько мусора там собралось:

# Если в очереди печати что-то естьif ($ContentSpoolDirecrory = Get-ChildItem $RemoteDefaultSpoolDirectory -Force){ # Считаем размер каталога с очередью печати $FolderSize = ($ContentSpoolDirecrory | Measure-Object -Property Length -Sum).Sum / 1Mb # Выводим «`nВ {0} находится {1} файл(а/ов), общим объёмом {2:

Вообще общепризнанным “best practice” не рекомендуется выводить простой текст в выводе скрипта, но так как это не было целью работы, и мне уже было лень с этим возиться, поэтому я просто воспользовался оператором –f.

Осталось только запустить службу:

$Service.StartService()

Если нужно перезапустить (остановить/запустить) другую службу, действия будут аналогичными, при необходимости можно имя службы и удалённого ПК засунуть в параметры, и запускать/останавливать/перезапускать любые службы на любых компьютерах

:/>  Проверка диска HDD в Windows 10

Проблемы с запуском

Вот этот вопрос мы будем выяснять и исправлять вместе с системой устранения неполадок Windows. Для этого:

  1. Меню «Пуск», пункт «Панель управления».
  2. Ищем и нажимаем «Устранение неполадок».
    Устранение неполадок компьютера
    Выбираем «Оборудование и звук» в этом окне
  3. Из четырёх пунктов выбираем «Оборудование и звук».
  4. Раздел «Печать» — «Поиск и устранение проблем с печатью».
    Окно настроек «Оборудование и звук»
    Ищем и выбираем пункт «Печать»
  5. Тут снова внимание на картинку. Под словом «Дополнительно» скрывается нужный для нас пункт «Запуск от имени администратора». Нажимаем его и разрешаем всё, что попросит система.
    Мастер настройки печати
    Разрешаем действия от имени Администратора
  6. Жмём кнопку «Далее», ждём.

Все эти действия — ещё 5% успешного исхода дела.

Способ 1: «диспетчер компонентов»

Одним из способов запустить нужную службу является её активация через «Диспетчер компонентов».

  1. Щелкните «Пуск». Зайдите в «Панель управления».
  2. Переход в Панель управления через меню Пуск в Windows 7

  3. Щелкайте «Программы».
  4. Переход в раздел Программы в Панели управления в Windows 7

  5. Далее жмите «Программы и компоненты».
  6. Переход в раздел Программы и компоненты из радела Программы в Панели управления в Windows 7

  7. В левой части открывшейся оболочки щелкайте «Включение или отключение компонентов Windows».
  8. Переход в окно Диспетчера включения или отключения компонентов из раздела Программы и компоненты в Панели управления в Windows 7

  9. Запускается «Диспетчер компонентов». Возможно, вам придется подождать непродолжительное время, пока будет выстроен список элементов. Найдите среди них наименование «Служба печати и документов». Щелкните по плюсику, который расположен слева от вышеуказанной папки.
  10. Открытие списка элементов в папке Служба печати и документов в окне Диспетчера включения или отключения компонентов в Windows 7

  11. Далее щелкните по чекбоксу слева от надписи «Служба печати и документов». Кликайте до тех пор, пока он не станет пустым.
  12. Отключение всех компонентов в папке Служба печати и документов в окне Диспетчера включения или отключения компонентов в Windows 7

  13. Затем снова щелкните по названному чекбоксу. Теперь напротив него должен быть установлен флажок. Такую же пометку установите около всех элементов, входящих в указанную выше папку, где она не установлена. Далее жмите «OK».
  14. Включение всех компонентов в папке Служба печати и документов в окне Диспетчера включения или отключения компонентов в Windows 7

  15. После этого будет выполнена процедура изменения функций в Виндовс.
  16. Процедура изменений функций в Windows 7

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

После перезапуска ПК изучаемая нами ошибка должна исчезнуть.

Способ 2: «диспетчер служб»

Активировать связанную службу для устранения описываемой нами ошибки можно через «Диспетчер служб».

  1. Перейдите через «Пуск» в «Панель управления». Как это совершить объяснялось в Способе 1. Далее выбирайте «Система и безопасность».
  2. Переход в раздел Система и безопасность в Панели управления в Windows 7

  3. Заходите в «Администрирование».
  4. Переход в раздел Администрирование из раздела Система и безопасность в Панели управления в Windows 7

  5. В открывшемся перечне выбирайте «Службы».
  6. Переход в окно Диспетчера служб из раздела Администрирование в Панели управления в Windows 7

  7. Активируется «Диспетчер служб». Тут необходимо отыскать элемент «Диспетчер печати». Для более быстрого поиска постройте все названия в алфавитном порядке, кликнув по наименованию столбца «Имя». Если в колонке «Состояние» нет значения «Работает», то это означает, что служба деактивирована. Чтобы запустить её, сделайте дважды клик по названию левой кнопкой мышки.
  8. Переход в окно свойств отключенной службы Диспетчер печати в Диспетчере служб в Windows 7

  9. Запускается интерфейс свойств службы. В области «Тип запуска» из представленного перечня выберите «Автоматически». Нажмите «Применить» и «OK».
  10. Активация автоматического запуска службы в окне свойств отключенной службы Диспетчер печати в Диспетчере служб в Windows 7

  11. Возвратившись в «Диспетчер», заново выделяйте имя того же объекта и кликните «Запустить».
  12. Переход к запуску отключенной службы Диспетчер печати в Диспетчере служб в Windows 7

  13. Происходит процедура активации службы.
  14. Процедура запуска отключенной службы Диспетчер печати в Диспетчере служб в Windows 7

  15. После её окончания около наименования «Диспетчер печати» должен стоять статус «Работает».

Теперь изучаемая нами ошибка должна исчезнуть и больше не отображаться при попытке подключения нового принтера.

Способ 2: встроенное средство исправления неполадок

В Windows 10 присутствует встроенное средство обнаружения и исправления ошибок, однако в случае проблемы с «Диспетчер печати» оно не всегда работает корректно, поэтому мы и взяли этот метод вторым. Если упомянутый выше инструмент у вас функционирует нормально, попробуйте воспользоваться установленной функцией, а делается это следующим образом:

  1. Откройте меню «Пуск» и перейдите в «Параметры».
  2. Переход в Параметры операционной системы Windows 10

  3. Щелкните на разделе «Обновление и безопасность».
  4. Перейти в обновления и безопасность Windows 10

  5. На панели слева отыщите категорию «Устранение неполадок» и в «Принтер» нажмите на «Запустить средство устранения неполадок».
  6. Запустить диагностику неполадок принтера Windows 10

  7. Дождитесь завершения обнаружения ошибок.
  8. Ожидание завершения сканирования неполадок принтера Windows 10

  9. Если принтеров используется несколько, потребуется выбрать один из них для дальнейшей диагностики.
  10. Выбрать необходимый принтер для диагностики в Windows 10

  11. По окончании процедуры проверки вы сможете ознакомиться с ее результатом. Найденные сбои обычно исправляются или предоставляется инструкция по их решению.
  12. Завершение сканирования принтера в Windows 10

Если модуль устранения неполадок не выявил проблем, переходите к ознакомлению с другими способами, приведенными ниже.

Способ 3: восстановление системных файлов

Изучаемая нами ошибка может также являться следствием нарушения структуры системных файлов. Чтобы исключить подобную вероятность или, наоборот, исправить ситуацию, следует совершить проверку компьютера утилитой «SFC» с последующей процедурой восстановления элементов ОС при необходимости.

  1. Нажмите «Пуск» и войдите во «Все программы».
  2. Переход во Все программы через меню Пуск в Windows 7

  3. Перемещайтесь в папку «Стандартные».
  4. Переход в папку Стандартные через меню Пуск в Windows 7

  5. Отыщите «Командная строка». Кликните по этому элементу правой кнопкой мыши. Нажмите «Запуск от имени администратора».
  6. Запуск Командной строки от имени администратора через контекстное меню с помощью меню Пуск в Windows 7

  7. Активирована «Командная строка». Выполните в неё ввод такого выражения:

    sfc /scannow

    Щелкайте Enter.

  8. Запуск утилиты sfc для проверки системных файлов на предмет их целостности при помощи ввода командны через командную строку в Windows 7

  9. Начнется процедура проверки системы на целостность её файлов. Этот процесс займет определенное время, так что приготовьтесь подождать. При этом ни в коем случае не закрывайте «Командную строку», но при необходимости можете свернуть её на «Панель задач». Если будут выявлены какие-то несоответствия в структуре ОС, то они тут же будут исправлены.
  10. Проверка системных файлов на предмет их целостности утилитой sfc в командной строке в Windows 7

  11. Впрочем, возможен вариант, когда при наличии обнаруженных ошибок в файлах, проблему не получится сразу же устранить. Тогда следует повторить проверку утилитой «SFC» в «Безопасном режиме».

Урок: Сканирование на целостность структуры файлов системы в Виндовс 7

Способ 6: переустановка драйвера принтера

Драйвер принтера обеспечивает его нормальное функционирование с ОС, а также эти файлы связываются с рассматриваемой подсистемой. Иногда такое ПО устанавливается не совсем корректно, из-за чего и появляются ошибки различного рода, в том числе и упомянутая сегодня.

Подробнее: Удаление старого драйвера принтера

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

Подробнее: Установка драйверов для принтера

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

Шаг № 3: ставим «драйвера»

Итак, для того чтобы вернуть к жизни диспетчер печати в Windows 7, нам остается только поставить повторно драйвера для используемого принтера. Вариантов выполнения этой задачи несколько (читать о них здесь). Однако лучше всего заглянуть на сайт производителя устройства и загрузить «дрова» оттуда.

  1. подключаем принтер к ПК и с помощью утилиты «Выполнить» исполняем задачу hdwwiz, а затем в открывшемся окошке жмем кнопку «Далее»:Запуск задачи hdwwiz
  2. выбираем в качестве варианта установки «Поиск…» и вновь нажимаем «Далее»:Установка оборудования

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

Отключается служба печати Windows 10

Оставьте комментарий

Adblock
detector