Обновлено 20.10.2021
Добрый день! Уважаемые читатели и гости блога Pyatilistnik.org. В прошлый раз, я вам подробно объяснил как решается проблема, с печатью при ошибке «Не существует обработчик печати», она всего лишь, одна из тысячи, которая вам может повстречаться. Сегодня я покажу, что делать, если при попытке установить принтер, будь, то локальный или на терминальной ферме, вы получаете ошибку доступа, что вашей операционной системе Windows не удается подключиться к принтеру, хотя все права есть. Как и обычно, все оказывается очень просто.
Возможные причины ошибки доступа к принтеру
Давайте для начала опишу свою ситуацию. Есть терминальная ферма на Windows Server, если кто-то не знает, что это такое, то это мощный сервер или группа серверов, на которые заходят пользователи из вне, для работы с приложениями установленными на них, очень распространенный вариант сейчас в крупных и средних компаниях. Пользователь работая на терминальном сервере, пытается распечатать документ, но его принтер либо не видится вообще, либо при попытке к нему обратиться выдает сообщение с ошибкой:
Подключение к принтеру: Windows не удается подключиться к принтеру. Отказано в доступе
И такое сообщение может быть и с локальным устройством, вплоть до последней версии Windows 10 Fall Creators Update.
Возможные причины, на что следует обратить внимание:
- Проверить права на доступ к принтеру, актуально для корпоративных принтеров, где системные администраторы, дают возможность пользоваться устройством, по принципу групп, подробнее читайте в статье, про безопасность принтеров и разграничение прав.
- Проблема с драйверами устройства, об этом ниже
- Физическая проблема с принтером
- Принтер находится в автономном режиме (Обязательно проверьте, что не установлена галка)
- Проблемы с SNMP трафиком (Попробуйте его отключить)
Разновидность ошибки
Давайте я приведу самые распространенные коды ошибок в данной ситуации, когда Windows не удается подключиться к принтеру. Отказано в доступе:
- 0x00000002
- 0x0000000a
- 0x00000006
- 0x00000057
- 0x00004005
- 0x0000007e
- 0x000003eb
- 0x00000214
- 0x00000bcb
Решение проблемы с подключением к принтеру
Причина одна и кроется она в цифровой подписи драйверов принтеров, а точнее в отсутствии данной подписи. Если драйвера на устройства подписаны не валидным с точки зрения Microsoft сертификатом или вообще без него, то он таки драйвера не принимает, считая это потенциальной угрозой, в следствии чего ваше устройство перестает работать. Это не новая проблема, но после очередного обновления KB3170455 или KB5005030, проверка цифровой подписи драйверов, ужесточилась.
Напоминаю, что описанные методы решения проблемы, вначале применялись к принтерам на терминальной ферме, но решение актуально и к локальным устройствам, подключенным по USB
- Можете полностью отключить проверку цифровой подписи драйверов, как это делать я описывал, посмотрите. В Windows 10 она обязательная и ужесточенная.
- Можете удалить обновление KB3170455, но думаю это не лучший вариант, когда есть в разы проще. (Для этого в командной строке введите wusa.exe /uninstall /KB:3170455 или через окно параметров сервера, или панель управления)
- Правка реестра Windows.
Так как у меня в основном на работе операционная система windows 10 и с нее не удается подключиться к принтеру на терминальном сервере, где есть драйвера без цифровой подписи, чтобы не делать большого количества телодвижений и кучей перезагрузок, я для принтеров, которые испытывают проблемы, поставлю один параметр, который все поправит.
Что вы делаете, вы открываете реестр и переходите вот по такому пути, лично я для быстрого поиска по реестру использую утилиту register jump, делается это либо локально, если принтер подключен по USB, либо же на сервере терминалов, если используются они.
HKLMSystemCurrentControlSetControlPrintEnviroments Windowsx64DriversVersion-3Модель вашего принтера
В моем случае это HP M1212, но таких полным полно, Canon, Xerox и так далее.
Находим там параметр PrinterDriverAttributes, по умолчанию там будет стоять значение 0, нужно поменять его на 1. После чего вы смело перезагружаете службу печати либо же сам сервер.
Данный метод, действует в 90 процентах случаев, если вам не помогло, то ниже я привожу дополнительные методы решения данной проблемы.
Дополнительные методы решения ошибок 0x00000002, 0x0000000a, 0x00000006, 0x00000057
Если ваши клиенты так и не могут подключиться к терминальным принтерам, то попробуйте очистить ветку реестра:
HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrentVersionPrintProvidersClient Side Rendering Print ProviderServers
В моем случае, я удалил серверы с сервера-печати, убедитесь, что у вас тут будет пусто. После чего можете перезапустить сервер или службу печати.
Еще на Windows 7 бывает ошибка 0x0000007e «Windows не удается подключиться к принтеру. Не существует обработчик печати» при попытке подключить те же сетевые принтеры, решается все пересозданием порта печати. Порт это некое указание, где искать ваше устройство.
Через правый клик, перейдите в свойства печати, вкладка «Порты». Находите текущий порт, и удаляете его.Затем нажимаете добавить.
Указываем стандартный TCP/IP порт для сетевого принтера.
У вас откроется мастер добавления порта.
Указываем ip адрес или DNS имя принтера и имя порта.
Так же можете проверить, что на вкладке «Доступ» стоит галка, разрешающая его. Теперь ваше устройство доступно по сети. Попробуйте снова к нему обратиться по UNC пути \им вашего сервера печати (если есть)имя принтера. Например, \printserversumsungcolor
Еще советую попробовать утилиту диагностики Print-Spooler-Repair-Tool. Это поможет вам исправить ошибку 0x0000007e и, что не существует обработчик печати. Надеюсь данная заметка оказалась для вас полезной, если есть еще какие-либо методы, то пишите о них в комментариях.
Обновление 16.09.21
После очередного обновления безопасности повалилась новая волна обращений по проблеме с принтерами:
Connect to printer Windows cannot connect to the printer. Operation failed with error 0x0000011b
Проблема в том, что Microsoft попыталась закрыть брешь в обороне Print Nightmare, через обновление:
- KB5005030 — Windows Server 2019
- KB5005565 и KB5005568, KB5005566 — Windows 10
- KB5005613, KB5005627 — Windows 8.1 и Windows Server 2012
- KB5005563 — Windows 7
- kb5006670
Смысл в том, что теперь не обладая административными правами, вы не можете установить принтер. Выход из этого пока такой, это отключение параметра реестра RestrictDriverInstallationToAdministrators.
Вам нужно пройти в реестре Windows по пути:
HKEY_LOCAL_MACHINESoftwarePolicies MicrosoftWindows NTPrintersPointAndPrint
И выставить для RestrictDriverInstallationToAdministrators значение «0». Не забываем перезагрузиться.
Так же вы можете добавить и через командную строку, введя;
reg add «HKEY_LOCAL_MACHINESoftwarePoliciesMicrosoftWindows NTPrintersPointAndPrint» /v RestrictDriverInstallationToAdministrators /t REG_DWORD /d 0 /f
Исправление ошибки 0x0000011b через групповую политику
То же самое можно сделать и через групповую политику, для этого создайте RestrictDriverInstallationToAdministrators со значением 0. Идем в:
Конфигурация компьютера — Настройка — Конфигурация Windows — реестр ()
Прописываем:
-
- Действие — Создать или заменить, если он уже есть
- Путь раздела — SoftwarePolicies MicrosoftWindows NTPrintersPointAndPrin
- Имя параметра — RestrictDriverInstallationToAdministrators
- Тип — Reg_Dword
- Значение — 0
Далее обновлять политику.
так же политику можно создавать и для пользователя, в ветке конфигурация пользователя
Что с безопасностью теперь
оговорюсь, что удаление KB или выставление RestrictDriverInstallationToAdministrators на «0», возвращает дыру безопасности Print Nightmare, это нужно понимать. Тут два решения, первое долгое, ждать когда MS сделает новое обновление, неизвестно когда, или же сделать вот такую конструкцию.
Мы будим давать пользователю устанавливать принтер, а затем менять параметр реестра RestrictDriverInstallationToAdministrators на 1 и заново закрывать дыру, на полном автомате.
Вам необходимо, как я описывал выше создать ключ RestrictDriverInstallationToAdministrators со значением «0′. Далее, откройте планировщик задач, через окно выполнить.
Создаете задачу и задайте ей имя.
Обязательно укажите, что запускать нужно от имени «NT AUTHORITYСИСТЕМА» и выставлена галка «Выполнить с наивысшими привилегиями». Так же выставите, что это задание будет для Windows 7 и выше.
Переходим на вкладку триггеры, и создаем новый. Укажите, что задачу нужно выполнять например, каждые 15 минут. То есть, вы на время установки меняете удобным для вас способом параметр RestrictDriverInstallationToAdministrators на «0», а автоматическое задание, потом само его поменяет на 1 и закроет уязвимость Print Nightmare.
теперь перейдем на вкладку «действия». Прописываем:
- Программа или сценарий — C:WindowsSystem32cmd.exe
- В качестве аргументов — /c reg add «HKEY_LOCAL_MACHINESoftwarePoliciesMicrosoftWindows NTPrintersPointAndPrint» /v RestrictDriverInstallationToAdministrators /t REG_DWORD /d 1 /f
Все это теперь и будит, коряво, но защищать вас от Print Nightmare и давать возможность устанавливать драйвера, минуя все ошибки по типу 0x0000011b.
Все то же самое, можно сделать и через GPO через немедленную задачу, найти ее можно в разделе:
Конфигурация пользователя — настройка — Конфигурация Windows — Параметры панели управления — Назначенные задания
Создайте там «Немедленную задачу (Windows 7 и выше)».
Вот как у меня выглядит задание.
Надуюсь, что вы смогли устранить ошибку «Windows не удается подключиться к принтеру».
Сводка
Обновления для системы безопасности, выпущенные 6 июля 2021 г., содержат защиту от уязвимости удаленного выполнения кода в службе Windows Print Spooler (spoolsv.exe), которая называется PrintNightmare(PrintNightmare), задокументированная в CVE-2021–34527. После установки обновлений за июль 2021 г. и более поздних версий администраторы, включая делегированную группу администраторов, такие как операторы принтера, не могут установить на сервер печати драйверы принтера с подписью и без подписи. По умолчанию на сервер печати могут устанавливаться как подписанные, так и неподписаные драйверы принтера.
Примечание Перед установкой внеплановых и более поздних версий обновлений Windows CVE-2021–34527 группа безопасности операторов принтера может установить на сервер принтера как подписанные, так и неподписанных драйверы принтера. Начиная с внепланового обновления за июль 2021 г., для установки на сервер принтера подписанных и неподписанных драйверов принтера потребуются учетные данные администратора. При желании для переопределения всех параметров групповой политики Point и ограничений печати и обеспечения того, что только администраторы могут устанавливать драйверы принтера на сервер печати, настройте значение 1 в реестре RestrictDriverInstallationToAdministrators.
Мы рекомендуем вам немедленно установить последние обновления Windows, выпущенные 6 июля 2021 г. или после 6 июля 2021 г., во всех поддерживаемых клиентских и серверных операционных системах Windows, начиная с устройств, на которые сейчас работает служба печати. Затем в параметрах групповой политики «Настройка точки и ограничений печати» установите в параметрах групповой политики «При установке драйверов для нового подключения» и «При обновлении драйверов для существующего подключения».
«Разрешение»
-
Установите внеполосы или более поздние обновления за июль 2021 г.
-
Проверьте, истинны ли следующие условия:
-
Параметры реестра: HKEY_LOCAL_MACHINESOFTWAREPoliciesMicrosoftWindows NTPrintersPointAndPrint
-
NoWarningNoElevationOnInstall = 0 (DWORD) или не определен (значение по умолчанию)
-
UpdatePromptSettings = 0 (DWORD) или не определено (значение по умолчанию)
-
-
Групповая политика: вы не настроили групповую политику «Ограничения на печать и точках».
Если оба условия истинны, вы не будете уязвими для CVE-2021–34527 и дальнейшие действия не потребуется. Если одно из условий не истинно, вы становятся уязвимыми. Выполните следующие действия, чтобы изменить групповую политику Point и Print Restrictions на безопасную конфигурацию.
-
Откройте редактор групповой политики и перейдите в меню Конфигурация компьютера > Административные шаблоны > Принтеры.
-
Настройте параметры групповой политики Point и Print Restrictions следующим образом:
-
Установите для параметра групповая политика «Ограничения на печать» параметр «Включено».
-
«При установке драйверов для нового подключения»: «Показать предупреждение и запрос на повышение высоты».
-
«При обновлении драйверов для существующего подключения»: «Показать запрос предупреждения и повышения высоты».
-
Важно Мы настоятельно рекомендуем применить эту политику к всем компьютерам, на которые распространяется служба печати.
Требования к перезапуску: После применения этих параметров это изменение политики не требует перезагрузки устройства или службы печати.
3. Чтобы подтвердить правильное применение групповой политики, используйте следующие ключи реестра:
HKEY_LOCAL_MACHINESOFTWAREPoliciesMicrosoftWindows NTPrintersPointAndPrint
-
NoWarningNoElevationOnInstall = 0 (DWORD)
-
UpdatePromptSettings = 0 (DWORD)
Предупреждение При этом устройства, на которых установлено обновление CVE-2021–34527, становятся уязвимыми.
Примечание Настройка этих параметров не отключает функцию «Точка» и «Печать».
4. [Рекомендуется] Переопредить ограничения точки и печати, чтобы только администраторы могли устанавливать драйверы печати на серверах принтера. Для этого используется ключ реестра RestrictDriverInstallationToAdministrators. Для обновлений, выпущенных 6 июля 2021 г. и более поздних версий, по умолчанию задано значение 0 (отключено) до обновления от 10 августа 2021 г. Обновления, выпущенные 10 августа 2021 г. или более поздней версии, по умолчанию имеют значение 1 (включено). Дополнительные сведения о том, как настроить предопределение ограниченийУстановкиToAdministrators и другие рекомендации по печати, см. в KB5005652 — управление новыми точками и печатью при установке драйвера по умолчанию (CVE-2021-34481).
Дополнительные сведения
Как исправления для CVE-2021–34527 влияют на сценарий установки драйвера Point и Print по умолчанию для клиентского устройства, которое подключается к общему сетевому принтеру и устанавливает его?
Нет, исправления для CVE-2021–34527 напрямую не влияют на сценарий установки point и print driver по умолчанию для клиентского устройства, которое подключается к общему сетевому принтеру и устанавливает его. В этом случае клиентское устройство подключается к серверу печати и скачивает и устанавливает драйверы с этого надежного сервера. Этот сценарий отличается от ситуации, когда злоумышленник пытается установить вредоносный драйвер на самом сервере печати на локальном или удаленном компьютере.
Нужна дополнительная помощь?
- Информация о материале
- Категория: Windows
-
Просмотров: 829
После обновления Windows 10 и Windows 2012 Server R2 перестал печатать принтер находящийся в общем доступе.
Виной тому обновление:
- KB5005030 — Windows Server 2019
- KB5005565 и KB5005568, KB5005566 — Windows 10
- KB5005613, KB5005627 — Windows 8.1 и Windows Server 2012
- KB5005563 — Windows 7
Помогает удаление этих обновлений.
Другой вариант, воспользоваться диагностическим пакетом Show or Hide Updates, с сайта Microsoft его удалили, можно найти по имени файла wushowhide.diagcab в поисковике. Утилита Show or hide updates (wushowhide.diagcab) позволяет скрывать обновления драйверов и предотвращать повторную установку до того, как станет доступна исправная версия
Еще один вариант. Отключение параметра реестра RestrictDriverInstallationToAdministrators
Путь в реестре HKEY_LOCAL_MACHINESoftwarePolicies MicrosoftWindows NTPrintersPointAndPrint
Выставить для параметра RestrictDriverInstallationToAdministrators значение «0«. Перезагрузить компьютер.
Эти изменения можно внести через командную строку: reg add «HKEY_LOCAL_MACHINESoftwarePoliciesMicrosoftWindows NTPrintersPointAndPrint» /v RestrictDriverInstallationToAdministrators /t REG_DWORD /d 0 /f
Комментарии ()
Оставьте свой комментарий
14 сентября 2021 года Microsoft выпустили ряд обновлений для Windows 10. После установки этих обновлений, пользователи могут столкнуться с проблемой печати документов на принтеры, находящиеся в общем доступе и подключенные через сеть: принтер находится в режиме автономной работы; документы, отправленные на печать, остаются в очереди и не печатаются. При попытке переподключения принтера, появляется ошибка: «Windows не удаётся подключиться к принтеру» с кодом ошибки 0x0000011b, 0x00000709 или 0x80070035.
Описание проблемы
Данная ошибка может проявлять себя сообщениями: «Windows не удаётся подключиться к принтеру», «Установленная на данном компьютере политика не позволяет подключение к данной очереди печати. Обратитесь к системному администратору» с кодами ошибок 0x0000011b, 0x00000709, 0x80070035 и прочими, при попытке установить сетевой принтер, физически подключенный к другому ПК.
Причины проблемы
Данная проблема связана с изменением Microsoft политики безопасности по отношению к принтерам, подключенным через другие компьютеры.
В первые дни после обновлений (фигурировали обновления KB5005565, KB5005568, KB5006670, KB5006714, KB5007186, KB5007247) помогало удаление этих обновлений и запрет их установки через WUShowHide, однако с выходом одного из последующих обновлений, изменения вносятся перманентно, без возможности их отката при удалении обновления.
Решение проблемы
1. Удаление принтера
Первым делом необходимо удалить принтер на компьютере-клиенте, если это не было сделано ранее.
Для удаления принтера, перейдите в Панель управления – Устройства и принтеры (или «Просмотр устройств и принтеров» при просмотре в режиме Категории). Найдите необходимый принтер, нажмите по нему ПКМ – Удалить устройство.
2. Установка всех обновлений системы
Далее следует установить все обновления Windows на оба компьютера.
Для обновления системы перейдите в приложение «Параметры» (Win+I) – Обновление и безопасность – Центр обновления Windows – Проверить наличие обновлений.
Загрузка и установка обновлений может занять продолжительное время, в зависимости от количества обновлений, скорости интернета и производительности ПК.
После установки обновлений, перезагрузите ПК для их установки. После перезагрузки ПК, вновь проверьте наличие обновлений. Повторяйте до того момента, пока в Центре обновления Windows не появится надпись «У вас установлены все последние обновления».
3. Включите парольный доступ к принтерам и папкам
На компьютере-сервере перейдите в Панель управления – Центр управления сетями и общим доступом – Дополнительные параметры общего доступа – Все сети, переведите параметр «Общий доступ с парольной защитой» в положение «Включить общий доступ с парольной защитой».
4. Создайте пользователя для печати
Для работы печати на других компьютерах необходимо, чтобы на компьютере-сервере существовал пользователь с установленным паролем. Вы можете использовать уже существующую учётную запись, предварительно установив на неё пароль, но мы бы всё же порекомендовали завести для этого отдельную учётную запись.
Нажмите правой кнопкой мыши по кнопке «Пуск» и откройте оснастку «Управление компьютером».
Перейдите в раздел Служебные программы – Локальные пользователи и группы – Пользователи.
В открывшемся разделе со списком пользователей нажмите ПКМ на пустом месте, нажмите «Новый пользователь».
Введите название пользователя и укажите пароль. В нашем примере и имя пользователя, и пароль – print. Установите галочку на «Срок действия пароля не ограничен» и на «Запретить смену пароля пользователем».
Если раздела «Локальные пользователи и группы» нет, то для создания пользователя необходимо воспользоваться командной строкой (Win+R – «cmd» – OK), в которой последовательно ввести следующие команды:
net user print print /add net user print /passwordreq:no net user print /passwordchg:no wmic useraccount where name="print" set passwordexpires=false
Подробнее об управлении пользователями через CMD вы можете прочитать в нашей статье: Создание и управление пользователями Windows через командную строку
5. Внесение изменений в реестр
Далее следует внести изменения в реестр Windows (Win+R – «regedit» – OK). Обязательно это сделать на компьютере-сервере (куда физически подключен принтер), и крайне желательно – на компьютере-клиенте.
- Раздел:
HKLMSYSTEMCurrentControlSetControlPrint
Создайте ключRpcAuthnLevelPrivacyEnabled
(DWORD32) с значением0
- Раздел:
HKLMSoftwarePoliciesMicrosoftWindows NTPrintersPointAndPrint
(может понадобиться создать ветку)
Создайте ключRestrictDriverInstallationToAdministrators
(DWORD32) с значением1
Либо через командную строку:
reg add "HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlPrint" /v RpcAuthnLevelPrivacyEnabled /t REG_DWORD /d 0 /f
reg add "HKEY_LOCAL_MACHINESoftwarePoliciesMicrosoftWindows NTPrintersPointAndPrint" /v RestrictDriverInstallationToAdministrators /t REG_DWORD /d 1 /f
Либо скачайте готовый .reg-файл в архиве и запустите его, разрешив внести изменения в реестр: shared_printer_repair.zip
6. Перезагрузите оба компьютера и попробуйте установить принтер
После проделанных манипуляций, перезагрузите оба компьютера и вновь попробуйте установить принтер.
При входе с компьютера-клиента на компьютер-сервер должен запроситься пароль для доступа к сетевым папкам. Используйте имя пользователя и пароль от созданного на компьютере-сервере пользователя. При необходимости сохраните пароль в окне входа, чтобы в будущем не вводить его заново.
- Remove From My Forums
-
Question
-
I’m having an odd issue at my office upgrading our 300 users to Windows 7 from XP. So far we have upgraded 20 users and 3 of them have printing issues. Our printers have queues on a server and are deployed through a GP. They have been updated
with WIN7 compatible drivers and tested prior to the upgrade of these 20 users.The 3 people having the issue all experience the same issue. After a reboot, all the printers work without issue, and then some time later they will all stop working. A restart of the spooler is required to get them working again, which could last for 2
days before it happens again or two hours. At no time do the lose access to the server so I don’t think it is related to credentials(the print server is also the file server). It is not timed with any events like server patching or reboots. It just seems random.While the network printers are not functioning, I tried creating a local print queue, with the exact same driver but pointing directly to the printer IP and it never stops working. When the network pinters are not working, the local queues are not affected,
so it’s certainly not a complete failure of the spooler, or maybe not at all. I really don’t know. Our printers range from HP Laserjets to Toshiba copiers, to Dell Laserjets and a few Canon copiers as well, and when they stop working, they all stop working,
so I don’t presume it’s a driver issue.I’ve even rebuilt the Win7 installation from scratch and the same issue happened that day.
The print jobs just queue up on the workstation and never go to the printer. I cannot find a single error in eventvwr related to it, however the job does show up as «error-printing» in the local queue. I have monitored the server print queue and the job
never gets there. The other 17 people(in some cases with the exact same PC), never have had a single issue printing.Any thoughts?
-
Moved by
Tuesday, April 27, 2010 9:36 PM
Moved to more appropriate forum category (From:Install, Upgrade and Activate)
-
Moved by
Answers
-
I found the solution. If you have print queues set up on a Windows 2003 server, like we do, there is an issue with the Asynchronous RPC Protocol that is used in Windows 7. It’s new and only works with Server 2008. Windows 7 is supposed to determine that
and use the «standard» RPC Protocol for servers that are not 2008, however somewhere Windows starts using it and that is where all network printers on Windows 2003 servers stop functioning exactly as I mentioned above. The fix is to disable the Asynchronous
RPC Protocol in Windows 7, which stops the problem from occurring.Create this registry key. Then restart the spooler.
HKLMSoftwarePoliciesMicrosoftWindows NTPrintersEnabledProtocols
DWORD
Value = 6This
will disable the Asynchronous RPC Protocol that is only supported by Server 2008 and the issue should not come up again. Or you could upgrade your server to 2008.-
Marked as answer by
Steve Klassen
Tuesday, May 4, 2010 5:55 PM
-
Marked as answer by
При установке либо подключении к уже установленному сетевому принтеру вы можете столкнуться с ошибкой 0x0000011b, являющейся на данный момент одной из самых распространенных проблем, с которыми приходится сталкиваться при работе с сетевыми устройствами печати. В последних сборках Windows 10 и 11 наиболее вероятной причиной этой неполадки являются выпущенные Microsoft обновления безопасности KB5005565, KB5005652 и KB5006670.
В задачу которых входит закрытие уязвимости CVE-2021-1678, более известной под названием Windows Print Spooler Spoofing Vulnerability.
Устранить вызываемую обновлениями ошибку можно их удалением, однако в списке установленных патчей безопасности они отсутствуют. При желании удалить их, конечно, можно, но есть более избирательное и тонкое решение — отключение защиты от CVE-2021-1678 в реестре.
Откройте редактор реестра командой regedit и разверните ветку:
HKLMSYSTEMCurrentControlSetControlPrint
Создайте в правой колонке новый параметр типа DWORD,
назовите его RpcAuthnLevelPrivacyEnabled, а в качестве его значения установите 0 (оставьте по умолчанию).
Перезагрузите компьютер и попробуйте подключиться к сетевому принтеру.
Если ошибка была вызвана защитой от указанной выше уязвимости, соединение с устройством установится в штатном режиме.
В случае отсутствия результата попробуйте такое дополнительное решение.
Перейдите в редакторе реестра к ветке HKLMSOFTWAREPoliciesMicrosoftWindows NTPrinters и посмотрите, имеются ли в последнем подразделе какие-либо параметры или вложенные подразделы. Если имеются, удалите их, не забыв перед этим создать на всякий случай точку восстановления системы.
Как вариант, в разделе Printers можно создать подраздел PointAndPrint с DWORD-параметром RestrictDriverInstallationToAdministrators и значением 0. Не забываем, что после внесения изменений в реестр нужно перезагружать систему.
Если применением твиков ошибку 0x0000011b при подключении принтера устранить не удается, удалите указанные патчи безопасности, выполнив в запущенной от имени администратора командной строке команду wusa /uninstall /kb:xxxxxxx, где xxxxxxx — номер пакета обновления.
Нельзя исключать, что ошибка 0x0000011b может быть вызвана и другими причинами, на что косвенно укажет отсутствие положительного результата от предпринятых действий. В таких случаях рекомендуется выполнить переустановку принтера, а также проверить сетевые настройки на компьютере.
Загрузка…
Published:
25 Apr 2020
File under:
Intune PowerShell
On the surface, installing printers on end user devices seems like a fairly simple process that’s been solved for decades — a nice combination of Group Policies and PowerShell has made this a non-issue.
But what if our devices aren’t domain joined?
When I first had to tackle this problem, I figured it would be a simple as running “Add-Printer” as the end user and moving on.
The problem arises however, when the printer requires drivers to be installed — the dreaded administration UAC prompt appears and ruins any chance of getting out of work early!
By default, Windows doesn’t trust printer drivers — It’s understood there are inherent security risks involved in blindly allowing drivers to be installed on your computer and as such, requires admin approval if a device wants to install one.
This issue was previously resolved by clearly defining via the Point and Print Restrictions group policy exactly what servers could be trusted by the devices, which would allow us to suppress any elevation prompts that would invariably appear.
“OK, cool — but can’t I just do that with an Administrative Template via Intune?” I hear you ask…
Here’s the rub — there’s actually two policies you need to define and one of them currently doesn’t appear in the administrative templates available to us in Intune.
No worries though — with PowerShell, we can solve this issue!
Let’s move onto the solution — This will be split up into two segments — Configuring the Point and Print Policies and installing the printers.
Point and Print Policies
As mentioned above, there are actually two policies that need to be configured to allow implicit trust for printer driver installation, the Point and Print Restrictions policy and the Package Point and Print — Approved Servers policy.
We define our restrictions for Point and Print in the PnP Restrictions policy, and then we define our allowed servers for those restrictions to be applied to in the Package PnP Approved Servers policy.
Luckily, both of these policies are quite easy to configure with PowerShell.
First let’s set up how we want to configure the restrictions policy.
#region Print servers
$printServers = @(
"print1.powers-hell.com"
"print2.powers-hell.com"
)
#endregion
#region PnP retrictions
$hklmKeys = @(
[PSCustomObject]@{
Name = "Restricted"
Type = "DWORD"
Value = "1"
Path = "HKLM:SOFTWAREPoliciesMicrosoftWindows NTPrintersPointAndPrint"
}
[PSCustomObject]@{
Name = "TrustedServers"
Type = "DWORD"
Value = "1"
Path = "HKLM:SOFTWAREPoliciesMicrosoftWindows NTPrintersPointAndPrint"
}
[PSCustomObject]@{
Name = "InForest"
Type = "DWord"
Value = "0"
Path = "HKLM:SOFTWAREPoliciesMicrosoftWindows NTPrintersPointAndPrint"
}
[PSCustomObject]@{
Name = "NoWarningNoElevationOnInstall"
Type = "DWord"
Value = "1"
Path = "HKLM:SOFTWAREPoliciesMicrosoftWindows NTPrintersPointAndPrint"
}
[PSCustomObject]@{
Name = "UpdatePromptSettings"
Type = "DWord"
Value = "2"
Path = "HKLM:SOFTWAREPoliciesMicrosoftWindows NTPrintersPointAndPrint"
}
[PSCustomObject]@{
Name = "ServerList"
Type = "String"
Value = $printServers -join ";"
Path = "HKLM:SOFTWAREPoliciesMicrosoftWindows NTPrintersPointAndPrint"
}
)
#endregion
This is a simple array of configuration settings — all we are doing is replicating the same settings as shown in the first screenshot of this post.
Now let’s add the configuration of Package PnP — Approved Servers policy to our script..
#region Package PnP Approved Servers
$hklmKeys += [PSCustomObject]@{
Name = "PackagePointAndPrintServerList"
Type = "DWORD"
Value = "1"
Path = "HKLM:SOFTWAREPoliciesMicrosoftWindows NTPrintersPackagePointAndPrint"
}
foreach ($p in $printServers) {
$hklmKeys += [PSCustomObject]@{
Name = $p
Type = "String"
Value = $p
Path = "HKLM:SOFTWAREPoliciesMicrosoftWindows NTPrintersPackagePointAndPrintListofServers"
}
}
#endregion
Now with a little help from a very simple function I’ve created, we can import all of the settings to the registry..
#region Functions
function Set-ComputerRegistryValues {
param (
[Parameter(Mandatory = $true)]
[array]$RegistryInstance
)
try {
foreach ($key in $RegistryInstance) {
$keyPath = "$($key.Path)"
if (!(Test-Path $keyPath)) {
Write-Host "Registry path : $keyPath not found. Creating now." -ForegroundColor Green
New-Item -Path $keyPath -Force | Out-Null
Write-Host "Creating item property: $($key.Name)" -ForegroundColor Green
New-ItemProperty -Path $keyPath -Name $key.Name -Value $key.Value -PropertyType $key.Type -Force
}
else {
Write-Host "Creating item property: $($key.Name)" -ForegroundColor Green
New-ItemProperty -Path $keyPath -Name $key.Name -Value $key.Value -PropertyType $key.Type -Force
}
}
}
catch {
Throw $_.Exception.Message
}
}
#endregion
Set-ComputerRegistryValues -RegistryInstance $hklmKeys
Now if we open up RegEdit on our device, we should see the configuration in the HKLM:SoftwarePoliciesMicrosoftWindows NTPrinters path.
All we need to do now is deploy the script to our users via Intune, making sure to deploy it as the System to avoid any permissions issues to the registry.
Installing printers with PowerShell
Now that the difficult part is out of the way, let’s move on to installing the printers.
Hopefully you’ve already got all of the print queue names documented (and the names of the printers AND the queues are the same…) — if not, do it now..
Got your printers? ok, great — let’s set them up in an array.
#region Printers to install
$printers = @(
[PSCustomObject]@{
Printer = "MainPrinter"
Server = "print1.powers-hell.com"
}
[PSCustomObject]@{
Printer = "FrontDeskPrinter"
Server = "print1.powers-hell.com"
}
[PSCustomObject]@{
Printer = "BackupPrinter"
Server = "print2.powers-hell.com"
}
)
#endregion
Finally, as in the last section, with the help of a simple function I’ve created for this scenario, we will force the printers to install on the devices. Unlike last time, we don’t need admin access, so we will run this as the user.
#region functions
Function Set-LocalPrinters {
<#
.SYNOPSIS
Installs network printer to local machine.
.PARAMETER Server
FQDN or IP Address of print server
.PARAMETER printerName
Name of printer to be installed
#>
param (
[string]$server,
[string]$printerName
)
$printerPath = $null
$PrinterPath = "\$($server)$($printerName)"
$netConn = Test-NetConnection -ComputerName $Server | select-object PingSucceeded, NameResolutionSucceeded
if (($netconn.PingSucceeded) -and ($netConn.NameResolutionSucceeded)) {
write-host "Installing $printerName.." -ForegroundColor Green
if (Get-Printer -Name "$printerPath" -ErrorAction SilentlyContinue) {
Write-Host "Printer $printerPath already installed" -ForegroundColor Green
}
else {
Write-Host "Installing $printerPath" -ForegroundColor Green
& cscript /noLogo C:windowsSystem32Printing_Admin_Scriptsen-USprnmngr.vbs -ac -p $printerPath
if (Get-Printer -Name "$printerPath" -ErrorAction SilentlyContinue) {
Write-Host "$printerPath successfully installed.."
}
else {
Write-Warning "$printerPath not successfully installed"
}
}
}
else {
Write-Host "Print server not pingable. $printerPath will not be installed" -ForegroundColor Red
}
}
#endregion
#region Install printers
foreach ($p in $printers) {
Set-LocalPrinters -server $p.Server -printerName $p.Printer
}
#endregion
The function above isn’t doing anything special — it’s primarily just making sure that we can access the network path and that the printer isn’t already installed. The only cool thing to mention is line 26.
& cscript /noLogo C:windowsSystem32Printing_Admin_Scriptsen-USprnmngr.vbs -ac -p $printerPath
Windows has come bundled with a bunch of printer administration scripts since Windows 7 and it’s amazing. You can read more about how it works here. These sorts of tools are super handy to know about, as it saves us having to “re-invent the wheel” so to speak.
So that’s it! two scripts — once run as system to configure the device, and one run as user to map the printers.
Full examples of the code referenced in this article is, as always, available on my GitHub, and I can be reached on twitter if you have any questions. I love the distraction!