PowerShell управління принтерами і драйверами друку в Windows 10 / Server 2016

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


зміст:

  • Модуль PowerShell: PrintManagement
  • Установка драйвера друку в сховище драйверів
  • Установка нового принтера за допомогою PowerShell
  • Виведення списку принтерів на сервері друку за допомогою PowerShell
  • Підключення мережевого принтера з PowerShell
  • Видалення принтера за допомогою PowerShell

Модуль 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: \ Distr \ HP-pcl6-x64 \ hpcu118u.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: \ Distr \ HP-pcl6-x64 \ hpcu118u.inf (Встановити конкретний драйвер принтера) або pnputil.exe -i -a C: \ Distr \ HP-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-prnt1 \ HPCL3020

Windows 10 використовує останній принтер, на який виконувалася друк в якості принтера за замовчуванням, якщо ви хочете використовувати фіксований принтер за замовчуванням, виконайте команду:

Set-ItemProperty -Path "HKCU: \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ Windows" -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"