С помощью PowerShell можно автоматизировать типовые задачи управления принтерами и драйверами печати в Windows. В этой статье мы рассмотрим, как из консоли PowerShell создать, удалить или открыть общий доступ к принтеру, назначить принтер по-умолчанию; подключить сетевой принтер; установить или удалить драйвера принтера; управлять локальными портами и очередями печати.
Для управления подсистемой печати в Windows можно использовать встроенный PowerShell модуль PrintManagement. В этом модуле доступно 22 команды для управления принтерами:
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.
Установка драйвера печати в хранилище драйверов
Вывести список драйверов печати, который установлены в хранилище драйверов Windows:
Get-PrinterDriver
В модуле PrintManagement есть командлет Add—PrinterDriver, которые предполагает возможность установки драйвера из INF файла. Но фактически этот командлет позволяет добавить драйвера только в офлайн образ Windows (аналог Add-WindowsDriver, позволяющим интегрировать драйвера в оффлайн образ Windows).
Для установки драйвера печати из INF файла нужно использовать утилиту pnputil. Драйвера для нужной вам модели принтера нужно предварительно скачать с сайта разработчика и распаковать в локальную папку.
pnputil.exe -i -a "C:\drivers\KYOCERA\KyoClassicUniversalPCL6\OEMsetup.inf"
После того, как драйвер добавлен в хранилище драйверов, необходимо добавить его в список доступных принт-сервере.
Add-PrinterDriver -Name "Kyocera Classic Universaldriver PCL6"
Выведите список доступных драйверов печати:
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
Проверьте, что новый принтер появился в панели управления.
Если нужно изменить имя принтера:
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.
Большинство командлетов модуля 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" }
Вывести цветные принтеры:
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:
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