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. 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
Оказывается, драйвер из 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
Создадим 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
Чтобы переименовать принтер достаточно выполнить команду:
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"
Windows 10
PowerShell: управление принтерами и драйверами печати в Windows 10 / Server 2016