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

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

модуль 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.

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

Get-Help -Detailed

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

Get-Help -Examples

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

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

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

Get-PrinterDriver

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.
At line:1 char:1
+ Add-PrinterDriver -Name "HP Universal Printing PCL 6" -InfPath "C:Di ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo          : InvalidArgument: (MSFT_PrinterDriver:ROOT/StandardCimv2/MSFT_PrinterDriver) [Add-PrinterDriver], CimException   + FullyQualifiedErrorId : HRESULT 0x80070057,Add-PrinterDriver

Add-PrinterDriver : One or more specified parameters for this operation has an invalid value

Оказывается, драйвер из 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 файлах указанного каталога);pnputil.exe установка драйвера печати из inf файла
  • Командлетом Add-WindowsDriver, позволяющим интегрировать драйвера в оффлайн образ Windows.

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

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

Add-PrinterDriver установка драйвера печати hp из powershell

Совет. Как узнать, что нужно указывать в поле с именем драйвера печати при установке драйвера через PowerShell? Указываемое имя драйвера печати должно в точности совпадать с его внутренним системным именем, иначе при установке появится ошибка. Узнать правильное имя драйвера можно с помощью команды get-printerdriver на системе, в которой этот драйвер уже установлен, либо путем ручного исследования .inf файла драйвера.определяем имя драйвера принтера по 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) понадобится выполнить две разные команды.Add-Printer установка нового принтера из powershell
Чтобы переименовать принтер достаточно выполнить команду:

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

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

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

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

Get-Printer

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

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

Большинство командлетов модуля 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"

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