Не могу подключить сетевой принтер windows 10

С помощью PowerShell можно автоматизировать типовые задачи управления принтерами и драйверами печати в Windows. В этой статье мы рассмотрим, как из консоли PowerShell создать, удалить или открыть общий доступ к принтеру, назначить принтер по-умолчанию; подключить сетевой принтер; установить или удалить драйвера принтера; управлять локальными портами и очередями печати.

Содержание:

  • Установка драйвера печати в хранилище драйверов
  • Установка принтера с помощью PowerShell
  • Вывести список принтеров на сервере печати с помощью PowerShell
  • Подключить сетевой принтер из консоли PowerShell
  • Назначить принтер по-умолчанию
  • Удаление принтера с помощью PowerShell

Для управления подсистемой печати в Windows можно использовать встроенный PowerShell модуль PrintManagement. В этом модуле доступно 22 команды для управления принтерами:
Get-Command –Module PrintManagement

модуль powershell - PrintManagement управление принтерами

В модуле PrintManagement доступны 22 командлета PowerShell для управления принтерами, драйверами, портами печати и очередями:

  • Add-Printer – добавить (установить) новый принтер;
  • Add-PrinterDriver — установить новый драйвер печати;
  • Add-PrinterPort – создать порт печати;
  • Get-PrintConfiguration – вывести настройки принтера;
  • Get-Printer – вывести список принтеров на компьютере;
  • Get-PrinterDriver – вывести список установленных драйверов печати;
  • Get-PrinterPort — вывести список портов печати;
  • Get-PrinterProperty – показать свойства принтера;
  • Get-PrintJob – получить список заданий печати;
  • Read-PrinterNfcTag – получить информацию о принтере из NFC метки;
  • Remove-Printer — удалить принтер;
  • Remove-PrinterDriver — удалить драйвер принтера;
  • Remove-PrinterPort — удалить порт принтера;
  • Remove-PrintJob – удалить задание печати;
  • Rename-Printer — переименовать принтер;
  • Restart-PrintJob — перезапустить задание печати;
  • Resume-PrintJob — запустить приостановленное задание
  • Set-PrintConfiguration – изменить параметры печати принтера;
  • Set-Printer – изменить настройки принтера;
  • Set-PrinterProperty — изменить свойства принтера;
  • Suspend-PrintJob – приостановить выполнение задания печати;
  • Write-PrinterNfcTag – записать информацию в метку NFC.

Установка драйвера печати в хранилище драйверов

Вывести список драйверов печати, который установлены в хранилище драйверов Windows:

Get-PrinterDriver

Get-PrinterDriver вывод списка установленных драйверов для принтеров

В модуле PrintManagement есть командлет AddPrinterDriver, которые предполагает возможность установки драйвера из INF файла. Но фактически этот командлет позволяет добавить драйвера только в офлайн образ Windows (аналог Add-WindowsDriver, позволяющим интегрировать драйвера в оффлайн образ Windows).

Для установки драйвера печати из INF файла нужно использовать утилиту pnputil. Драйвера для нужной вам модели принтера нужно предварительно скачать с сайта разработчика и распаковать в локальную папку.

pnputil.exe -i -a "C:\drivers\KYOCERA\KyoClassicUniversalPCL6\OEMsetup.inf"

pnputil устанвить драйвер печати из inf файла

После того, как драйвер добавлен в хранилище драйверов, необходимо добавить его в список доступных принт-сервере.

Add-PrinterDriver -Name "Kyocera Classic Universaldriver PCL6"

Точное имя драйвера принтера скопируйте из INF файла.

Выведите список доступных драйверов печати:

Get-PrinterDriver

Get-PrinterDriver список устанволенных драйверов принтеров

Установка принтера с помощью PowerShell

Перед тем как создать новый принтер, нужно создать порт печати. Это может быть локальный порт или сетевой порт (в случае печати на удаленный принтер по сети), Например:
Add-PrinterPort -Name "LocalPort:" -ErrorAction -Verbose

или

Add-PrinterPort -Name "IP_192.168.10.26" -PrinterHostAddress "192.168.10.26"

Чтобы создать новый принтер, нужно указать имя принтера, драйвер, и порт печати:

Add-Printer -Name "Ricoh IM 2702" -DriverName "Kyocera Classic Universaldriver PCL6" -PortName USB001 -Verbose

Add-Printer создать (установить) принтер с помощью powershell

Проверьте, что новый принтер появился в панели управления.

Принтер появился в панели Параметры Windows

Если нужно изменить имя принтера:

Rename-Printer -Name "Ricoh IM 2702" -NewName “Ricoh_2702"

Чтобы расшарить принтер по сети (открыть общий сетевой доступ к принтеру):

Set-Printer -Name "Ricoh IM 2702" -Shared $True -ShareName "Ricoh_2702"

Отключить общий доступ к принтеру:

Set-Printer -Name "Ricoh IM 2702" -Shared $False

Вывести список принтеров на сервере печати с помощью PowerShell

Вывести список принтеров, установленных на компьютере:

Get-Printer

Команда вернет имя принтера, тип (локальный или сетевой), драйвер, порт печати, открыт ли к принтеру общий доступ и опубликован ли принтер в AD.

Get-Printer вывод списка установленных принтенов на принт сервере

Большинство командлетов модуля PrintManagement можно использовать для управления принтерами на удаленных компьютерах (с помощью параметра -ComputerName).
Вывести список принтеров, установленных на удаленном компьютере (принт-сервере):

Get-Printer -ComputerName msk-prnt1 | Format-List Name,DriverName

Вывести только принтера с общим доступом:

Get-Printer -ComputerName msk-prnt1 | where Shared -eq $true | fl Name

Вывести все принтеры с поддержкой дуплексной печати:

Get-Printer | ForEach-Object { Get-PrintConfiguration -PrinterName $_.Name } | Where-Object { $_.DuplexingMode -ne "OneSided" }

powershell вывесим принтера с поддержкой дуплексной печати

Вывести цветные принтеры:

Get-Printer | ForEach-Object { Get-PrintConfiguration -PrinterName $_.Name } | where {$_.Color -eq $True}

Включить цветной режим печати для принтера:

Get-Printer 'HP Color LaserJet 150nw' | Set-PrintConfiguration -Color $true

Подключить сетевой принтер из консоли PowerShell

Чтобы подключить сетевой принтер с сервера печати, выполните:

Add-Printer -ConnectionName \\msk-prnt1\HPCL3020

Вывести список подключенных на компьютере сетевых принтеров:

Get-Printer | ?{$_.type -eq 'Connection'}

Удалить конкретный сетевой принтер:

Get-Printer -name \\msk-prnt1\HPCL3020 | Remove-Printer -force

Удалить все подключенные сетевые принтеры на компьютере:

Get-Printer | ?{$_.type -eq 'Connection'} | Remove-Printer

Назначить принтер по-умолчанию

В Windows 10 и выше в качестве принтера по умолчанию назначается принтер, на котором пользователь успешно печатал последний раз. Чтобы Windows не переназначала принтера по-умолчанию, нужно создать в реестре параметр LegacyDefaultPrinterMode:

Set-ItemProperty -Path "HKCU:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows" -Name "LegacyDefaultPrinterMode" -Value 1 –Force

Назначить принтер по-умолчанию:

$Printer = Get-CimInstance -Class Win32_Printer -Filter "Name='Ricoh IM 2702'"
Invoke-CimMethod -InputObject $Printer -MethodName SetDefaultPrinter

Powershell: назначить принтер по-умолчанию

Удаление принтера с помощью PowerShell

Чтобы удалить принтер, выполнить команду PowerShell:

Remove-Printer -Name "Ricoh IM 2702"

Затем можно удалить драйвер печати:

Remove-PrinterDriver -Name "Kyocera Classic Universaldriver PCL6"

В конце оставлю еще несколько полезных команд управления принтерами для системного администратора:

Отправить тестовую страницу на печать:

Invoke-CimMethod -MethodName printtestpage -InputObject (Get-CimInstance win32_printer | Where-Object Name -eq "HP LaserJet M1530 MFP Series PCL 6")

Очистить очередь печати принтера:

Get-Printer -Name "HP LaserJet M1530 MFP Series PCL 6" | Get-PrintJob | Remove-PrintJob

Все способы:

  • Подключаем сетевой принтер в Windows 10
    • Подготовительные действия
    • Способ 1: Меню «Параметры»
    • Способ 2: Классическое приложение «PowerShell»
    • Способ 3: «Панель управления»
  • Вопросы и ответы: 1

Сейчас практически в каждом доме присутствует несколько компьютеров, подключенных к одной интернет-сети, не говоря уже о различных офисах, где связанных устройств может быть бесчисленное количество. К тому же, многие желают использовать печатное оборудование, но подключать его постоянно к разным ПК совершенно неудобно. В этом случае на помощь приходит встроенная функция операционной системы Windows 10, которая позволяет сделать принтер общим и запускать печать с любого локального аппарата.

Подключаем сетевой принтер в Windows 10

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

Подробнее:
Как подключить принтер к компьютеру
Создание локальной сети через Wi-Fi-роутер
Создание домашней сети на Windows 10

Подготовительные действия

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

  1. Узнайте имя или IP-адрес ПК, куда подсоединен необходимый принтер. Эта информация потребуется при его добавлении через системные средства. Детальнее об этом читайте в отдельной нашей статье по следующей ссылке.
  2. Подробнее:
    Узнаем имя компьютера в сети
    Как узнать IP-адрес своего компьютера
    Как узнать IP-адрес чужого компьютера

  3. Предоставьте общий доступ в пределах локальной сети, чтобы обеспечить нормальное взаимодействие оборудования, всех файлов и папок.
  4. Подробнее: Настройка общего доступа в операционной системе Windows 10

  5. При возникновении проблем с отображением сетевого принтера воспользуйтесь отдельным руководством, перейдя к другому нашему материалу по ссылке далее.
  6. Подробнее: Что делать, если Windows 10 не видит сетевой принтер

  7. Узнайте точное имя принтера, для этого потребуется найти его на компьютере и запомнить или скопировать увиденное название.
  8. Подробнее: Поиск принтера на компьютере

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

Способ 1: Меню «Параметры»

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

  1. Откройте меню «Пуск» и зайдите в «Параметры».
  2. Выберите раздел «Устройства».
  3. Переход в раздел Устройства в меню Параметры операционной системы Windows 10 для добавления сетевого принтера

  4. Через боковую панель откройте категорию «Принтеры и сканеры».
  5. Открытие раздела с принтерами в меню Параметры для добавления сетевого принтера в Windows 10

  6. Здесь щелкните на «Добавить принтер или сканер».
  7. Запуск сканирования принтеров в меню Параметры Windows 10

  8. Нажмите на надпись «Необходимый принтер отсутствует в списке» при ее появлении.
  9. Переход к ручному добавлению нового принтера в Параметры операционной системы Windows 10

  10. Отметьте маркером пункт «Выбрать общий принтер по имени». Заполните адрес в формате \\Имя или IP-адрес компьютера\полное имя принтера и нажмите на «Далее».
  11. Ввод адреса сетевого принтера при ручном добавлении в операционной системе Windows 10

  12. Вы также можете кликнуть на «Обзор», после чего откроется Проводник, где в разделе «Сеть» отобразится список доступных общих принтеров для выбора.
  13. Выбор сетевого принтера через Проводник в операционной системе Windows 10

  14. Ожидайте завершения подключения выбранного устройства. При появлении уведомления о необходимости инсталляции драйверов подтвердите его, все остальные действия будут выполнены автоматически.
  15. Процесс добавления сетевого принтера Windows 10

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

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

Способ 2: Классическое приложение «PowerShell»

Данный метод заключается в использовании расширенной альтернативы «Командной строке» — классического приложения «Windows PowerShell». Подключение сетевого печатного оборудования таким образом осуществляется путем ввода специальных команд, однако для начала потребуется запустить саму консоль. Сделать это можно через меню «Пуск», введя соответствующее название в поиске.

Запуск классического приложения PowerShell для установки сетевого принтера Windows 10

В консоли потребуется ввести Add-Printer -ConnectionName "\\Имя_Компьютера\Полное_Название_Принтера" для добавления принтера по имени главного ПК. После указания команды нажмите на клавишу Enter, чтобы активировать ее.

Подключение сетевого принтера через PowerShell по имени компьютера в Windows 10

Если вы заинтересованы в соединении аппарата посредству IP-адреса ПК, команда обретет немного другой вид: Add-Printer -ConnectionName "\\192.168.1.8\Полное_Название_Принтера", где 192.168.1.8 — нужный локальный IP-адрес.

Подключение сетевого принтера в PowerShell по IP-адресу в Windows 10

Способ 3: «Панель управления»

Как уже было сказано ранее, «Панель управления» постепенно теряет свои позиции, ведь новое меню «Параметры» гораздо удобнее и функциональнее. Однако еще остались те пользователи, которым надо выполнить рассматриваемую сегодня задачу именно через это классическое приложение, а делается это так:

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

  3. На панели сверху щелкните на «Добавление принтера».
  4. Переход к добавлению принтера через Панель управления в Windows 10

  5. Кликните по ссылке «Необходимый принтер отсутствует в списке».
  6. Необходимый принтер отсутствует в списк при добавлении принтера через панель управления Windows 10

  7. Все остальные действия производятся с точностью так, как это было показано в Способе 1.
  8. Добавление сетевого принтера в Windows 10 через панель управления

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

Читайте также: Решение проблемы «Локальная подсистема печати не выполняется» в Windows 10

Наша группа в TelegramПолезные советы и помощь

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

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

Предположим, нам нужно что-то сделать на одной удаленной машине, и это достаточно простой список команд(или одна команда). В таком случае, проще всего использовать управление «один-к-одному» с помощью Enter-PSSession :

Enter-PSSession -ComputerName Comp1

где Comp1 — имя удаленной машины.

После подключения можно вручную выполнить различные команды. В случае, когда требуется выполнение нескольких команд или скрипта, можно воспользоваться командлетом Invoke-Command, который может установить удаленную сессию и выполнить несколько команд или скрипт(и даже сделать это в фоновом режиме).

Выполнение одной или несколько команд:

Invoke-Command -ScriptBlock {Restart-Service spooler} -ComputerName Comp1

Результатом будет перезапуск принт-спулера на машине с именем Comp1, в параметрах -ScriptBlock можно указать несколько команд.

Выполнение скрипта из файла:

Invoke-Command -FilePath .\script.ps1 -ComputerName Comp1

Будет выполнен скрипт из файла script.ps1, где в параметре -FilePath указывается путь к нему.

Для выполнения в скрытом режиме достаточно указать параметр -AsJob, однако следует помнить, что в этом случае PowerShell не возвращает результат выполнения, и его получить можно с помощью командлета Receive-Job(подробнее останавливаться на этом я в данной статье не буду, т.к. для задач данной статьи обычно достаточно простого подключения и выполнения команд вручную).

Итак, мы подключились к удаленной машине, что же мы можем сделать с принтерами?

1. Добавление сетевого принтера

Для добавления сетевого принтера  нужно использовать WScript.Network :

(New-Object -ComObject WScript.Network).AddWindowsPrinterConnection("\\Printserver1\Kyocera1")

где Printserver1 — имя принт-сервера, а Kyocera1 — имя добавляемого принтера.

2. Установка принтера по умолчанию

(New-Object -ComObject WScript.Network).SetDefaultPrinter('Kyocera')

где Kyocera — имя принтера.

3. Удаление подключения принтера

(New-Object -ComObject WScript.Network).RemovePrinterConnection("\\Printserver1\Kyocera1")

Соответственно, Kyocera1 — имя принтера, а Printserver1 — принт-сервер.

4. Вывод списка принтеров

Get-CimInstance -Class Win32_Printer

Тут все совсем просто.

Ошибка 0x0000011b «Windows не удается подключиться к принтеру» — одна из самых распространённых проблем при установке или подключении к уже установленному сетевому принтеру в актуальных версиях Windows. Однако, в большинстве случаев она сравнительно легко решаема.

В этой инструкции подробно о способах исправить ошибку 0x0000011b при подключении к принтеру в Windows 11 и Windows 10, один из которых, с большой вероятностью, сработает в вашей ситуации.

Отключение CVE-2021-1678 Mitigation (защита от CVE-2021-1678)

Основная причина появления и широкого распространения ситуации «В ходе операции произошла ошибка 0x0000011b» — выпущенные Майкрософт обновления для защиты от уязвимости в удаленном вызове процедур при подключении принтера (Windows Print Spooler Spoofing Vulnerability), сама уязвимость получила код CVE-2021-1678.

Обновления выходили под номерами KB5005565, KB5005652 и KB5006670, но в текущих версиях Windows 11 и Windows 10 вы не найдёте их в списке доступных к удалению. Тем не менее, отключить защиту от CVE-2021-1678 и, с большой вероятность, исправить ошибку 0x0000011b можно:

  1. Действия следует выполнять на «раздающем» доступ к принтеру компьютере. Нажмите правой кнопкой мыши по кнопке «Пуск», выберите пункт «Выполнить», введите regedit в открывшееся окно и нажмите Enter.
  2. В открывшемся редакторе реестра перейдите к разделу
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print
  3. Нажмите правой кнопкой мыши в пустом месте правой панели редактора реестра и выберите пункт «Создать» — «Параметр DWORD (32 бита)».
  4. Задайте имя
    RpcAuthnLevelPrivacyEnabled

    для вновь созданного параметра.

  5. Установите значение 0 для него.
    Исправление ошибки 0x0000011b в реестре Windows

  6. Закройте редактор реестра и перезагрузите компьютер.

После перезагрузки попробуйте вновь подключиться к принтеру, с большой вероятностью, ошибка 0x0000011b больше не появится.

Если предыдущий метод не помог, можно попробовать другие способы исправить проблему:

  1. Проверьте, есть ли в реестре Windows раздел
    HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows NT\Printers

    и содержит ли он какие-либо значения или подразделы (по умолчанию содержать не должен, при наличии — можно попробовать удалить, но имеет смысл создать точку восстановления системы перед этим). Также попробуйте создать в этом разделе подраздел с именем PointAndPrint, а в нём — параметр RestrictDriverInstallationToAdministrators со значением 0 или использовать команду

    reg add "HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows NT\Printers\PointAndPrint" /v RestrictDriverInstallationToAdministrators /t REG_DWORD /d 0 /f

    в командной строке, запущенной от имени администратора.

    Отключить установку принтеров только администраторами в реестре

  2. Маловероятно, что сработает, но: попробуйте использовать встроенное средство устранения неполадок принтера, подробнее: Устранение неполадок в Windows 11, Устранение неполадок Windows 10.
  3. Этот способ не очень желателен, поскольку открывает уязвимости, закрытые соответствующими обновлениями. Проверьте, возможно ли удаление обновлений KB5005565, KB5005652 и KB5006670 на вашем компьютере. Проще всего сделать это, запустив командную строку от имени администратора и введя команду (пример для первого из обновлений в списке):
    wusa /uninstall /kb:5005565

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

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

Надеюсь, один из способов помог в решении, ошибка 0x0000011b исправлена, а принтер успешно подключён.


Рейтинг 4.62/193:

newlife_86

0 / 0 / 0

Регистрация: 22.12.2017

Сообщений: 13

Добавление сетевого принтера на удаленной машине

22.12.2017, 07:50. Показов 37488. Ответов 21

Метки нет (Все метки)


Всем привет! интересует такой вопрос — можно ли средствами powershell удаленно устанавливать сетевые принтеры. Например — есть принтсервер \\testprint\ На нем установлены различные принтера и доступны для установки по сети(шаре). Т.е. задача такая, написать скрипт где выбирать необходимый принтер с этого сервера и устанавливать его на удаленный пк. Пробовал через invoke-command отправлять команду на удаленный пк :

PowerShell
1
2
3
4
5
6
Invoke-Command -ScriptBlock {
 
    $PrinterPath = "\\testprint\PrintShare"
    $net = new-Object -com WScript.Network
    $net.AddWindowsPrinterConnection($PrinterPath)
} -ComputerName "Remote-PC"

Пишет — имя принтера задано не верно.. хотя на локальном пк отрабатывает нормально.

Может кто нибудь знает другие методы? Или что я не так делаю в данном примере?



0



IT_Exp

Эксперт

34794 / 4073 / 2104

Регистрация: 17.06.2006

Сообщений: 32,602

Блог

22.12.2017, 07:50

Ответы с готовыми решениями:

Коннект к удалённой машине
может ктонибудь знает благодаря каким компонентам осуществляеться связка с mysql БД,

и вообще как это делаеться ????

!!! если…

Подключение к удаленной машине
почему я не могу подключиться к удаленной машине???
вот код

public bool Connect()
{
try

Время на удаленной машине
Доброго времени суток! Необходимо получать время на удаленной машине, что использовать для этого, какие есть способы?

21

Maks

Супер-модератор

8813 / 4716 / 571

Регистрация: 13.03.2013

Сообщений: 16,761

Записей в блоге: 16

22.12.2017, 08:00

Сообщение от newlife_86

Может кто нибудь знает другие методы?

Не знаю, как в powershell, но я для таких целей всегда использую батник

Windows Batch file
1
2
3
4
5
@echo off
rundll32 printui.dll,PrintUIEntry /in /n "\\SERVER\PRINTER"
::Подключение принтера по сети
rundll32 printui.dll,PrintUIEntry /y /n "\\SERVER\PRINTER"
::Делает принтер используемым по умолчанию

и на всякий случай

Windows Batch file
1
2
3
@echo off
cscript prnmngr.vbs -d -p "\\SERVER\PRINTER"
::Удаляет указанный принтер на локальном ПК



0



0 / 0 / 0

Регистрация: 22.12.2017

Сообщений: 13

22.12.2017, 08:11

 [ТС]

Спасибо конечно) я знаю этот метод, но интересует именно средствами powershell ))



0



1886 / 1108 / 428

Регистрация: 22.01.2016

Сообщений: 3,050

22.12.2017, 10:28

Сообщение от newlife_86

интересует такой вопрос — можно ли средствами powershell удаленно устанавливать сетевые принтеры.

Если ПК доменные, то удобнее всего решить такую задачу с помощью Group Policy



0



Супер-модератор

8813 / 4716 / 571

Регистрация: 13.03.2013

Сообщений: 16,761

Записей в блоге: 16

22.12.2017, 11:20

Сообщение от newlife_86

) я знаю этот метод, но интересует именно средствами powershell ))

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



0



0 / 0 / 0

Регистрация: 22.12.2017

Сообщений: 13

25.12.2017, 02:06

 [ТС]

Тогда может подскажете, есть ли возможность запускать этот батник на удаленной машине с моего рабочего места. Т.е. что бы не «беспокоить пользователя» и просто подключить ему нужный сетевой принтер ?))



0



6374 / 2199 / 342

Регистрация: 10.12.2013

Сообщений: 7,538

25.12.2017, 06:51

Add-Printer ?



0



Супер-модератор

8813 / 4716 / 571

Регистрация: 13.03.2013

Сообщений: 16,761

Записей в блоге: 16

25.12.2017, 07:44

Сообщение от newlife_86

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

Как запустить .bat по сети?



0



KDE777

1886 / 1108 / 428

Регистрация: 22.01.2016

Сообщений: 3,050

25.12.2017, 10:56

Сообщение было отмечено newlife_86 как решение

Решение

Сообщение от newlife_86

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

Если GPO воспользоваться не хотите, тогда запускаем «батник» через powershell

PowerShell
1
2
3
4
5
Invoke-Command -ComputerName "Remote-PC" -Scriptblock {
    iex "RUNDLL32 PRINTUI.DLL,PrintUIEntry /ga /n""\\testprint\PrintShare"""
    Stop-Service -Name spooler -Force
    Start-Service -Name spooler
}



0



Супер-модератор

8813 / 4716 / 571

Регистрация: 13.03.2013

Сообщений: 16,761

Записей в блоге: 16

25.12.2017, 11:56

newlife_86,
Еще можно закинуть батник в Планировщик.



0



newlife_86

0 / 0 / 0

Регистрация: 22.12.2017

Сообщений: 13

27.12.2017, 06:28

 [ТС]

Спасибо большое! Этот метод сработал, добавляется нужный принтер. Может еще подскажете команду как удалить сетевые принтеры. И еще бы список установленных получать))

Добавлено через 1 час 0 минут
Пробую такую же команду отправить на удаленный пк только на удаление принтера, не работает, принтер на месте остается(( локально у меня работает.

PowerShell
1
2
3
4
5
Invoke-Command -ComputerName "Remote-PC" -Scriptblock {
    iex "rundll32.exe printui.dll,PrintUIEntry /dn /n""\\testprint\PrintShare"""
    Stop-Service -Name spooler -Force
    Start-Service -Name spooler
}



0



KDE777

1886 / 1108 / 428

Регистрация: 22.01.2016

Сообщений: 3,050

27.12.2017, 11:55

Сообщение от newlife_86

Спасибо большое! Этот метод сработал, добавляется нужный принтер. Может еще подскажете команду как удалить сетевые принтеры. И еще бы список установленных получать))
Пробую такую же команду отправить на удаленный пк только на удаление принтера, не работает, принтер на месте остается(( локально у меня работает.

PowerShell
1
2
3
4
5
6
7
8
9
10
11
$ComputerName = "Remote-PC"
$NetPrinter = "`"\\testprint\PrintShare`""
 
# Устанавливаем сетевой принтер на удалённом ПК, без Invoke-Command
iex "RUNDLL32 PRINTUI.DLL,PrintUIEntry /ga /c\\$ComputerName /n$NetPrinter"
 
# Удаляем сетевой принтер на удалённом ПК, без Invoke-Command
iex "RUNDLL32 PRINTUI.DLL PrintUIEntry /gd /c\\$ComputerName /n$NetPrinter Gw /q"
 
# Получаем список сетевых принтеров с удалённого ПК
icm -Comp $ComputerName -ScriptBlock { ls "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Print\Connections" | %{$_.GetValue("Printer")} }

Вот только с получением списка сетевых принтеров есть одно, но — если пользователь подключил принтер самостоятельно, то HKLM-ветке его не будет и нужно смотреть в HKCU (HKEY_CURRENT_USER\Software\Microsoft\Wi ndows NT\CurrentVersion\Devices) каждого пользователя

Получить список сетевых принтеров локально намного проще:

PowerShell
1
gwmi Win32_Printer | ? {$_.Network}

Равно, как и удалить:

PowerShell
1
gwmi Win32_Printer | ? {$_.Network} | % {if ($_.ShareName -eq $ShareName) {$_.Delete()}}



0



6374 / 2199 / 342

Регистрация: 10.12.2013

Сообщений: 7,538

27.12.2017, 13:06

это всё понятно, но совсем неинтересно.
а интересно попробовать прикрутить DSC.
или Ansible.
а можно и Ansible + DSC.

дело за мотивацией. вот у меня пока не хватает.

Добавлено через 5 минут
дело ещё и в том, что powershell( и все его производные тоже) мутирует прямо на глазах;
надо подождать, чтобы затвердел и остепенился.



0



1886 / 1108 / 428

Регистрация: 22.01.2016

Сообщений: 3,050

27.12.2017, 13:18

Сообщение от volodin661

это всё понятно, но совсем неинтересно.
а интересно попробовать прикрутить DSC.
или Ansible.
а можно и Ansible + DSC

Ещё SCCM забыли

Но как я уже здесь писал, при наличие AD, задача из этой темы проще всего решается через Group Policy. Причём вплоть до автоматического подключения принтера в зависимости от номера комнаты пользователя.

Добавлено через 3 минуты

Сообщение от volodin661

дело ещё и в том, что powershell( и все его производные тоже) мутирует прямо на глазах;
надо подождать, чтобы затвердел и остепенился.

Здесь в качестве основного способа подключения предложено — RUNDLL32.EXE — по моему, твёрже уже некуда



0



0 / 0 / 0

Регистрация: 22.12.2017

Сообщений: 13

28.12.2017, 04:14

 [ТС]

Удаление/подключение заработало, спасибо огромное, мне это и нужно было)) а вот с получением списка проблемы
icm -Comp $ComputerName -ScriptBlock { ls «HKEY_CURRENT_USER\Software\Microsoft\Wi ndows NT\CurrentVersion\Devices»| %{$_.GetValue(«Printer»)} }
Такой командой выдает ошибку —
Не удается найти путь «C:\Users\user\Documents\HKEY_CURRENT_US ER\Software\Microsoft\Windows NT\CurrentVersion\Devices», так как он не существует.
по моему эта команда ломится на удаленном пк в реестр, но запрашивает ветку с моей учеткой, а не под тем пользователем который сейчас там работает.

Добавлено через 1 час 4 минуты
Подправил путь к реестру, неверно прописал
icm -Comp $ComputerName -ScriptBlock { ls «HKCU:\Software\Microsoft\Windows NT\CurrentVersion\Devices» | %{$_.GetValue(«Printer»)} }
В этом случае ни чего не возвращает. Хотя если посмотреть у пользователя в реестре записи есть.



0



KDE777

1886 / 1108 / 428

Регистрация: 22.01.2016

Сообщений: 3,050

28.12.2017, 11:50

Сообщение было отмечено newlife_86 как решение

Решение

Сообщение от newlife_86

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

Сообщение от newlife_86

Подправил путь к реестру, неверно прописал
icm -Comp $ComputerName -ScriptBlock { ls «HKCU:\Software\Microsoft\Windows NT\CurrentVersion\Devices» | %{$_.GetValue(«Printer»)} }
В этом случае ни чего не возвращает. Хотя если посмотреть у пользователя в реестре записи есть.

Вы внимательно прочитали мой ответ #12 — «нужно смотреть в HKCU каждого пользователя«? Invoke-Command выполняется в сессии/профиле пользователя запустившего эту команду.

И ещё раз — в HKCU перечисленны принтеры, подключенные пользователем самостоятельно. Если информация о таких принтерах нужна, то получить их список можно примерно так:

PowerShell
1
2
3
4
5
6
7
8
9
10
11
Invoke-Command -ComputerName $ComputerName -ScriptBlock {
    New-PSDrive -PSProvider Registry -Name HKU -Root HKEY_USERS\ | Out-Null
    ls "HKU:" | %{
        $reg_path = "$($_.name.Replace('HKEY_USERS\','HKU:\'))\Software\Microsoft\Windows NT\CurrentVersion"
        if ($user_printers = ls $reg_path -EA SilentlyContinue | ? Name -Like '*\Devices' | % {$_.GetValueNames() | ? {$_ -like '\\*'}})
        {
            "User: $_`n"
            $user_printers
        }
    }
}



0



0 / 0 / 0

Регистрация: 22.12.2017

Сообщений: 13

29.12.2017, 02:35

 [ТС]

Что то я немного запутался, только начинаю изучать Пош. Вообще изначально задача такая была — именно средствами поша (т.к. я пишу форму на нем для управления AD и удаленно Компами в целом) реализовать добавление/удаление принтера на удаленный пк(доменный) и получать список принтеров, актуальный, текущего пользователя на удаленном пк. Т.е. например поступил запрос добавить такой то принтер с принтсервера на такой то ПК. Прежде мне нужно получить список принтеров пользователя, если нужно поудалять лишние и добавить нужный по запросу с установкой его по дефолту.
Если с удалением и добавлением я более менее разобрался(спасибо за команды), а вот со списком беда.. как мне получить список принтеров текущего интерактивного пользователя на удаленном пк. что бы проанализировать что нужно убрать, добавить новый принтер, ну и в дальнейшем так же получать актуальную информацию по принтерам.

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

Добавлено через 10 минут
Хотя пардон, список удается получить с помощью этого скрипта, даже после добавления мной принтера. Но появилась другая проблема.. не дает удалить принтера которые уже были установлены не мной на удаленном пк.
Запускаю
iex «RUNDLL32 PRINTUI.DLL PrintUIEntry /gd /c\\$ComputerName /n$NetPrinter Gw /q»
И получаю ошибку — не удалось удалить подключение компьютера к принтеру , проверьте имя принтера..
В итоге те принтера которые добавил я удаленно я могу удалять, а те которые там уже были установлены не мной, а тем пользователем, я удалить не могу ((



0



KDE777

1886 / 1108 / 428

Регистрация: 22.01.2016

Сообщений: 3,050

29.12.2017, 14:14

Сообщение от newlife_86

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

И ещё раз — есть принтеры подключенные администратором, которые доступны всем локальным пользователям этого ПК, они перечислены в ветке HKLM. А есть принтеры, которые пользователь подключил самостоятельно — открыл в проводнике \\printserver и дважды кликнул по имени нужного принтера. Такие принтеры перечислены в HKCU конкретного пользователя.

Сообщение от newlife_86

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

Для этого нужно сначала найти интерактивный сеанс (а ещё могут быть RDP-сессии) и установить пользователя и его SID.

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

PowerShell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Invoke-Command -ComputerName $ComputerName -ScriptBlock {
    
    if ( $system_printers = ls "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Print\Connections" | %{$_.GetValue("Printer")} )
    {
        "На компьютере $env:COMPUTERNAME, найдены доступные всем локальным пользователям сетевые (общие) принтеры:`n"
        $system_printers
    }
 
    
    New-PSDrive -PSProvider Registry -Name HKU -Root HKEY_USERS\ | Out-Null
 
    foreach ($proc in Get-WmiObject -class win32_process | ? {$_.ProcessName -eq 'explorer.exe'})
    {
        
        $reg_path = "HKU:\$($proc.GetOwnerSid().Sid)\Software\Microsoft\Windows NT\CurrentVersion"
 
        if ($user_printers = ls $reg_path -EA SilentlyContinue | ? {$_.Name -Like '*\Devices'} | % {$_.GetValueNames() | ? {$_ -like '\\*'}})
        {
            "`nУ пользователя $($proc.GetOwner().User), найдены лично подключенные сетевые (общие) принтеры:`n"
            $user_printers
        }
        
    }
}

Сообщение от newlife_86

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

Это совсем не тривиальная задача. Но очевидно, что если пользователь разобрался, как самостоятельно добавить себе общий принтер, то и сам сможет его удалить…



0



0 / 0 / 0

Регистрация: 22.12.2017

Сообщений: 13

01.03.2018, 10:30

 [ТС]

Сообщение от KDE777

Это совсем не тривиальная задача. Но очевидно, что если пользователь разобрался, как самостоятельно добавить себе общий принтер, то и сам сможет его удалить…

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



0



KDE777

1886 / 1108 / 428

Регистрация: 22.01.2016

Сообщений: 3,050

01.03.2018, 11:00

Сообщение от newlife_86

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

Решения для удаления принтеров вам показали:

PowerShell
1
gwmi Win32_Printer | ? {$_.Network} | % {if ($_.ShareName -eq "\\testprint\PrintShare") {$_.Delete()}}

или

Windows Batch file
1
rundll32.exe printui.dll,PrintUIEntry /dn /n"\\testprint\PrintShare"

Теперь можете попробовать:

1. Cоздать задание в планировщике, которое сработает от имени вошедшего пользователя.
2. Настроить логон-скрипт, который опять же сработает при входе пользователя в систему.

Не по теме:

Но повторюсь — «при наличие AD, задача из этой темы проще всего решается через Group Policy». Я бы лично, добавлял/удалял принтеры пользователей исключительно через GPO (что собственно и делаю), а не пытался бы реализовать это стоя в гамаке на лыжах (я про свой скрипт из ответа #18 :))



0



Новые блоги и статьи

Все статьи  

Все блоги / 

Как перейти от Waterfall к Agile

EggHead 06.05.2025

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

Оптимизация SQL запросов — Продвинутые техники

Codd 06.05.2025

Интересно наблюдать эволюцию подходов к оптимизации. Двадцать лет назад всё сводилось к нескольким простым правилам: «Избегайте SELECT *», «Используйте индексы», «Не джойните слишком много таблиц». . . .

Создание микросервисов с gRPC и Protobuf в C++

bytestream 06.05.2025

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

Многопоточность и параллелизм в Python: потоки, процессы и гринлеты

py-thonny 06.05.2025

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

Конкурентность (concurrency) — это когда ваша программа умеет жонглировать. . .

Распределенное обучение с TensorFlow и Python

AI_Generated 05.05.2025

В машинном обучении размер имеет значение. С ростом сложности моделей и объема данных одиночный процессор или даже мощная видеокарта уже не справляются с задачей обучения за разумное время. Когда. . .

CRUD API на C# и GraphQL

stackOverflow 05.05.2025

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

Распознавание голоса и речи на C#

UnmanagedCoder 05.05.2025

Интеграция голосового управления в приложения на C# стала намного доступнее благодаря развитию специализированных библиотек и API. При этом многие разработчики до сих пор считают голосовое управление. . .

Реализация своих итераторов в C++

NullReferenced 05.05.2025

Итераторы в C++ — это абстракция, которая связывает весь экосистему Стандартной Библиотеки Шаблонов (STL) в единое целое, позволяя алгоритмам работать с разнородными структурами данных без знания их. . .

Разработка собственного фреймворка для тестирования в C#

UnmanagedCoder 04.05.2025

C# довольно богат готовыми решениями – NUnit, xUnit, MSTest уже давно стали своеобразными динозаврами индустрии. Однако, как и любой динозавр, они не всегда могут протиснуться в узкие коридоры. . .

Распределенная трассировка в Java с помощью OpenTelemetry

Javaican 04.05.2025

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

Наверх

Понравилась статья? Поделить с друзьями:
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
  • Git checkout windows style
  • Как изменить звук загрузки windows 10
  • Ge60 msi windows 10
  • Как получить права администратора в windows 11 для удаления папки windows old
  • Подсистема windows для linux как использовать