PowerShell: управление принтерами и драйверами печати в Windows 10 / Server 2016

В предыдущей статье мы рассмотрели олдскульные vbs скрипты, которые можно было использовать для управления принтерами и печатью во всех версиях Windows, начиная с Windows XP. Сегодня же мы рассмотрим типовые команды для создания, удаления принтеров, портов и драйверов печати в Windows при помощи PowerShell. Рассмотренные методы управления принтерами можно использовать в современных ОС — Windows 10, 8.1 и Windows Server 2012 R2 / 2016 / 2019.

Модуль 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 — вывести список портов печати;
  • 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.

Подробную информацию о синтаксисе конкретной команды можно получить так:

Get-Help <имя_командлета > -Detailed

Примеры использования команд:

Get-Help <имя_командлета > -Examples

Рассмотрим несколько примеров типовых сценариев управления принтерами в Windows 10 из PowerShell.

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

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

Get-PrinterDriver

Уставим в системе новый драйвер печати, например, HP Universal Printing PCL 6. Согласно документации, команда PowerShell для добавления драйвера должна быть такой:

Add-PrinterDriver -Name "HP Universal Printing PCL 6" -InfPath "C:DistrHP-pcl6-x64hpcu118u.inf"

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

Add-PrinterDriver : One or more specified parameters for this operation has an invalid value._x000D_At line:1 char:1_x000D_+ Add-PrinterDriver -Name "HP Universal Printing PCL 6" -InfPath "C:Di ..._x000D_+ ~~~~~~~~~~~~~~~~~~~~~~~~~_x000D_+ CategoryInfo          : InvalidArgument: (MSFT_PrinterDriver:ROOT/StandardCimv2/MSFT_PrinterDriver) [Add-PrinterDriver], CimException   + FullyQualifiedErrorId : HRESULT 0x80070057,Add-PrinterDriver

Оказывается, драйвер из inf файла можно добавить только в том случае, если он уже находится в хранилище драйверов DriverStore (подробнее про хранилище можно почитать здесь ). Получается, что с помощью команды Add-PrinterDriver установить драйвер, отсутствующий в хранилище драйверов системы нельзя. Для установки драйвера в DriverStore можно воспользоваться:

  • vbs скриптом из предыдущей статьи;
  • Утилитой pnputil .exe . Формат такой: pnputil.exe -i -a C:DistrHP-pcl6-x64hpcu118u.inf (установить конкретный драйвер принтера) или pnputil.exe -i -a C:DistrHP-pcl6-x64*.inf (установит все драйвера, найденные в inf файлах указанного каталога);
  • Командлетом Add-WindowsDriver , позволяющим интегрировать драйвера в оффлайн образ Windows.

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

Add-PrinterDriver -Name "HP Universal Printing PCL 6"

Совет . Как узнать, что нужно указывать в поле с именем драйвера печати при установке драйвера через PowerShell? Указываемое имя драйвера печати должно в точности совпадать с его внутренним системным именем, иначе при установке появится ошибка. Узнать правильное имя драйвера можно с помощью команды get-printerdriver на системе, в которой этот драйвер уже установлен, либо путем ручного исследования .inf файла драйвера.

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

Создадим ip порт для печати на сетевом принтере (тут можно указать как IP адрес сетевого принтера, так и имя удаленного принт-сервера):

Add-PrinterPort -Name "IP_192.168.10.26" -PrinterHostAddress "192.168.10.26"
Перед добавлением порта вы можете проверить, существует ли он:

$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"
}

С помощью следующей команды мы создадим в системе новый принтер и опубликуем его (откроем к нему общий доступ ):
Add-Printer -Name hp2050_Office1_Buh -DriverName "HP Deskjet 2050 J510 series Class Driver" -PortName IP_192.168.10.26 -Shared -ShareName "hp2050_1_BUh" –Published

Примечание . Заметьте, что для выполнения этой же операции в случае использования vbs скриптов (Printing Admin scripts) понадобится выполнить две разные команды.
Чтобы переименовать принтер достаточно выполнить команду:

Rename-Printer -Name "hp2050_Office1_Buh" -NewName " hp2050_Salary"

После выполнения указанных команд в системе появится новый принтер с общим доступом под именем hp2050_Office1_Buh.

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

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

Get-Printer

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

Большинство командлетов модуля PrintManagement можно использовать для просмотра состояния и управления принетрами, драйверами и очередями печати на удаленных компьютерах. Имя удаленного компьютера или сервера указывается в качестве аргумента параметра ComputerName .

С помощью PowerShell вы можете получить информацию об установленных принтерах на удаленном компьютере (принт-сервере), для этого выполните команду:

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

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

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

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

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

Add-Printer -ConnectionName \msk-prnt1HPCL3020

Windows 10 использует последний принтер, на который выполнялась печать в качестве принтера по умолчанию, если вы хотите использовать фиксированный принтер по-умолчанию, выполните команду:

Set-ItemProperty -Path "HKCU:SOFTWAREMicrosoftWindows NTCurrentVersionWindows" -Name "LegacyDefaultPrinterMode" -Value 1 –Force

Чтобы установить принтер по-умолчанию используйте следующие команды:

$wsnObj = New-Object -COM WScript.Network
$wsnObj.SetDefaultPrinter(%PrinterName%)

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

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

Remove-Printer -Name "hp2050_Office1_Buh"

Вы можете удалить конкретный драйвер при помощи командлета Remove-PrinterDriver:

Remove-PrinterDriver -Name "HP Universal Printing PCL 6"

admin

Share
Published by
admin

Recent Posts

Консоль удаленного рабочего стола(rdp console)

Клиент удаленного рабочего стола (rdp) предоставляет нам возможность войти на сервер терминалов через консоль. Что…

1 неделя ago

Настройка сети в VMware Workstation

В VMware Workstation есть несколько способов настройки сети гостевой машины: 1) Bridged networking 2) Network…

1 неделя ago

Логи брандмауэра Windows

Встроенный брандмауэр Windows может не только остановить нежелательный трафик на вашем пороге, но и может…

1 неделя ago

Правильный способ отключения IPv6

Вопреки распространенному мнению, отключить IPv6 в Windows Vista и Server 2008 это не просто снять…

1 неделя ago

Ключи реестра Windows, отвечающие за параметры экранной заставки

Параметры экранной заставки для текущего пользователя можно править из системного реестра, для чего: Запустите редактор…

1 неделя ago

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

В этой статье расскажу про возможность просмотра журналов событий из командной строки. Эти возможности можно…

1 неделя ago