How to Install and Remove Printer with PowerShell on Windows
Sometimes while installing or uninstalling a printer, you may face a wide range of unexpected errors:
- It might be impossible to remove the printer from the system.
- The printer cannot be uninstalled completely.
- New drivers fail to be installed.
- After installation, the error The driver is not fully installed” or “Somefunctions will be unavailable” shows up.
However disturbing it may look at first glance, there is no need to panic since the worst-case scenario is to format the computer’s hard disk and install the operating system and all the required software. In this article, we will go through some typical commands for managing printers, ports, and print drivers on such operating systems as Windows 10, Windows 8.1, and Windows Server 2012 R2 / 2016 / 2019 by using PowerShell. You’ll also find how to add or remove network printers.
Модуль PowerShell: PrintManagement
Вместе с выходом Windows 8.1 и Windows Server 2012 R2 Microsoft выпустила новую версию PowerShell 4.0 (входит в состав Windows Management Framework 4.0), в котором был существенно расширен список командлетов по управлению сервером печати на базе Windows. Полный список командлетов, по управлению принтерами, драйверами и очередями печати, доступных в модуле PrintManagement на Windows 10 (PoSh v5) можно вывести командой:
Get-Command –Module PrintManagement
В модуле PrintManagement доступны 22 командлета PowerShell для управления принтерами, драйверами, портами печати и очередями:
- Add-Printer – добавить (установить) новый принтер;
- Add-PrinterDriver — установить новый драйвер печати;
- Add-PrinterPort – создать порт печати;
- Get-PrintConfiguration – вывести настройки печати принтера;
- Get-Printer – вывести список принтеров, установленных на компьютере;
- Get-PrinterDriver – вывести список установленных драйверов печати;
- Get-PrinterPort — вывести список портов печати;
Подробную информацию о синтаксисе конкретной команды можно получить так:
Примеры использования команд:
Рассмотрим несколько примеров типовых сценариев управления принтерами в Windows 10 из PowerShell.
How to Install Printer Using PowerShell?
Create an IP port for a network printer (here you can specify both the IP address of the network printer and the name of the remote print server):
Add-PrinterPort -Name «IP_192.168.10.26» -PrinterHostAddress «192.168.10.26»
Before adding a new IP print port, you can check if it exists:
$portName = «IP_192.168.10.26»
$checkPortExists = Get-Printerport -Name $portname -ErrorAction SilentlyContinue
if (-not $checkPortExists) Add-PrinterPort -name $portName -PrinterHostAddress «192.168.10.26»
>
With the help of the following command, we will install and share a new printer on the computer:
Add-Printer -Name hp3027_Office1_Buh -DriverName «HP LaserJet M3027 MFP PCL6 Class Driver» -PortName IP_192.168.10.26 -Shared -ShareName «hp3027_1_BUh» –Published
Note: Note that to perform the same operation (install and share a printer) using VBS scripts (Printing Admin scripts), you should perform two different commands.
After running these commands, a new shared printer with the name “hp3027_Office1” will appear in the system.
To rename the printer, just run the command:
Rename-Printer -Name «hp3027_1_Buh» -NewName «hp3027_F1_Salary»
Putting it all Together
So what have we learned? Use Group Policy if you can, but if you can’t, a little prep work and some PowerShell can still get printers done without a mental breakdown. It will just be four lines.
pnputil.exe /a «\fileshareHPPrinter*.inf» Add-PrinterDriver -Name «HP OfficeJet 5200 series PCL-3» -InfPath «C:WindowsSystem32DriverStoreFileRepositoryhpygid24_v4.inf_amd64_f312bf16a5228084hpygid24_v4.inf» Add-PrinterPort -Name «Ports McGee» -PrinterHostAddress «IP Of Printer» Add-Printer -DriverName «HP OfficeJet 5200 series PCL-3» -Name «Printy» -PortName «Ports McGee»
The next step is running this on all computers that need it. I would recommend PDQ Deploy and PDQ Inventory. You will be able to get each computer you need and installed on those machines in just minutes.
Jordan had spent his life wondering why tasks he didn’t like to do had no options to complete themselves. Eventually he had to make that happen on his own. It turned out that he enjoyed making tasks complete themselves, and PDQ thought that is something he should talk about on the internet while drinking most Thursdays on the PDQ webcast.
Для чего нужен сетевой принтер
Сетевой принтер позволяет распечатывать картинки и документы с любого компьютера или ноутбука, подключённого к локальной сети. Физически устройство остаётся подсоединено к одному ПК: не требуется переносить принтер с места на место, организовывать для него свободное пространство, подключать к новым USB-разъёмам. Выполнять все эти манипуляции каждый раз долго и неудобно. Чтобы приступить к печати со своего рабочего места, достаточно узнать, как подключить сетевой принтер в Windows 10, выбрать файл и отправить его в очередь.
Такой подход актуален для устройств печати, которые нельзя напрямую подключить к интернету: посредством Ethernet-кабеля или беспроводной сети. В противном случае задача ещё упрощается: принтер становится видимым для всех компьютеров в локальной сети и без дополнительных настроек. Оборудование выступает в роли автономного сетевого устройства, и всё, что требуется для печати с рабочего ПК, — нажать кнопку питания и убедиться, что в лотке есть бумага.
С исчезновением из Windows 10 версии 1803 раздела «Домашняя группа» изменился и порядок настроек. Ниже представлен актуальный способ, позволяющий подключить сетевой принтер на операционной системе последнего поколения, а печатать на нём — из Windows 7, 8/8.1 и 10.
Учет сетевых принтеров
Первая проблема, которая возникает при управлении большим количеством любых объектов — это учет. Без него легко запутаться, что где установлено и кому должно быть подключено.
Самое простое и универсальное решение — CSV. В конце концов, из любой системы инвентаризации, ServiceDesk или Excel-таблицы можно выгрузить в CSV и потом легко импортировать это в PowerShell, что мы и будем делать дальше.
У нас выгрузка выглядит вот так:
Поясню сразу, для чего столько полей:
- Name — сетевое имя принтера, оно прописывается в DNS и на сервере печати
- ByGroup — поле определяет, подключать принтер всем, кто находится в соответствующей подсети или только тем, кто входит в группу AD. Также по группе задаются ACL.
- Subnet — подсеть, в которой должен находиться пользователь для работы с принтером
- Location — строка расположения принтера, по которой ищет виндовый мастер добавления принтеров
Многие не знают, что происходит при поиске принтера стандартным мастером «Установка принтера». А происходит вот что. Мастер берет поле Location (Расположение) из атрибутов компьютера в AD, и выбирает из опубликованных в AD принтеров все, у которых расположение начинается с той же строки. То есть, если у компьютера пользователя в расположении указано «Омск/Офис на Ленина», то в поиске отобразятся принтеры с расположениями «Омск/Офис на Ленина/», «Омск/Офис на Ленина/Кабинет 404» и «Омск/Офис на Ленина/Приёмная»
Add PrinterPort
The first step is to create the printerport. We use the cmdlet add-printerport to create a TCP/IP port for our printer. The cmdlet is really simple to use, just add a name and printer ip address to create a TCPIP printerport
With the command above you create a TCP print port name “TCPPort:192.168.0.200” with the Ip Address 192.168.0.200. Because we entered a PrinterHostAddress the cmdlet knows that you want a TCP port.
So you can name the printerport anything you want. To create a TCP Port you don’t need to add TCPPort: in front of it. But I recommend you do because this way you can see in the Printer Server > Ports view on the client which kind of ports are created. Also, the IP Address in the port name isn’t necessary. This will work to:
Серьезный разговор с 3055 или, Чувак ты поднял на гору не тот камень
Вот он, LaserJet 3055/3052 — самый вредный парень, на удивление вижу я его чаще всех. На самом деле — скажу по секрету — я начал заниматься им первым — пошел через дебри фильтрации вывода procmon при установке драйвера для поиска чего-нибудь интересного и утонул где-то посередине. Когда очередной раз procmon упал из-за нехватки памяти, я решил отложить эту затею до более дружелюбного и спокойного состояния.
Второй набег на разбор установщика МФУ дал результат: спустя часа полтора разбора логов в недрах вывода установщика была найдена жемчужина — hppniscan01.exe
Запуск с необходимыми параметрами моментально установил сканер в устройства и прописал необходимые ветки реестра:
hppniscan01.exe -f «hppasc16.inf» -m «vid_03f0&pid_012a&IP_SCAN» -a «192.168.0.30» -n 1
В дистрибутивах драйверов других принтеров HP есть ее шестидесяти четырех разрядная версия, драйвер 3055 же поддерживает только x86 операционные системы.
Драйвера сканера я решил выдернуть из общей папки драйверов и сложить отдельно, необходимые файлы легко читаются из inf-файла драйвера. Дерево получилось следующего вида:
C:DriversScannersip3055scanhpgtpusd.dll
C:DriversScannersip3055scanhppasc01.cat
C:DriversScannersip3055scanhppasc01.dll
C:DriversScannersip3055scanhppasc01.inf
C:DriversScannersip3055scanhppniscan01.exe
C:DriversScannersip3055scanhpptpml3.dll
C:DriversScannersip3055scanhpxp3390.dll
C:DriversScannersip3055scanDriversdot4
C:DriversScannersip3055scanDriversdot4Win2000hpzidr12.dll
C:DriversScannersip3055scanDriversdot4Win2000hpzipm12.dll
C:DriversScannersip3055scanDriversdot4Win2000hpzipr12.dll
C:DriversScannersip3055scanDriversdot4Win2000hpzipr12.sys
Функция установки сканера теперь стала совсем простой, хоть и с зависимостью от внешней компоненты.
Итоговый вид скрипта, с некоторыми захардкоженными упрощениями, примет следующий вид:
Этот же способ отлично подходит для всех оказавшихся вокруг меня МФУ от HP, для которых я создал отдельные папки с драйверами и варианты выбора в свитче функции установки сканера.
Список файлов драйвера можно посмотреть в разделах inf-файла с именами [SourceDisksFiles], [RegisterDlls], [WIA_CopyFiles] и далее по файлу. Скриншот по драйверам 3055 и 1536, для наглядности:
Из описанных в этой заметке отрывков кода можно собрать полноценный скрипт автоматической установки МФУ, а если добавить в него немного гуя и snmp, то можно вообще навсегда закрыть для себя тему установки МФУ на новые машины.
На этом на сегодня всё, спасибо за внимание. Если в комментариях подскажут чего не хватает МФУ 3055 для работы при установке первым способом посредством devcon, буду сильно благодарен. Может быть кто-то проделал ту же работу, что и я, но добился больших успехов.
В следующей части, если кто-то кинет таки инвайт в песочницу, покажу как расширить наш сценарий для работы с МФУ Xerox и Kyocera.