У попередній статті ми розглянули олдскульний 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
Створимо 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-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"