В предыдущей статье мы рассмотрели олдскульные vbs скрипты, которые можно было использовать для управления принтерами и печатью во всех версиях Windows, начиная с Windows XP. Сегодня же мы рассмотрим типовые команды для создания, удаления принтеров, портов и драйверов печати в Windows при помощи PowerShell. Рассмотренные методы управления принтерами можно использовать в современных ОС — Windows 10, 8.1 и Windows Server 2012 R2 / 2016 / 2019.
Вместе с выходом 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 для управления принтерами, драйверами, портами печати и очередями:
Подробную информацию о синтаксисе конкретной команды можно получить так:
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._x000D_At line:1 char:1_x000D_+ Add-PrinterDriver -Name "HP Universal Printing PCL 6" -InfPath "C:Di ..._x000D_+ ~~~~~~~~~~~~~~~~~~~~~~~~~_x000D_+ CategoryInfo : InvalidArgument: (MSFT_PrinterDriver:ROOT/StandardCimv2/MSFT_PrinterDriver) [Add-PrinterDriver], CimException + FullyQualifiedErrorId : HRESULT 0x80070057,Add-PrinterDriver
Оказывается, драйвер из inf файла можно добавить только в том случае, если он уже находится в хранилище драйверов DriverStore (подробнее про хранилище можно почитать здесь ). Получается, что с помощью команды Add-PrinterDriver установить драйвер, отсутствующий в хранилище драйверов системы нельзя. Для установки драйвера в DriverStore можно воспользоваться:
pnputil.exe -i -a C:DistrHP-pcl6-x64hpcu118u.inf
(установить конкретный драйвер принтера) или pnputil.exe -i -a C:DistrHP-pcl6-x64*.inf
(установит все драйвера, найденные в inf файлах указанного каталога); После добавления драйвер принтера в хранилище, необходимо добавить его в список доступных принт-сервере.
Add-PrinterDriver -Name "HP Universal Printing PCL 6"
Создадим 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.
Выведем полный список принтеров, установленных на данном компьютере:
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
Чтобы подключить принтер с сервера печати, используйте команду:
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:
Remove-Printer -Name "hp2050_Office1_Buh"
Вы можете удалить конкретный драйвер при помощи командлета Remove-PrinterDriver:
Remove-PrinterDriver -Name "HP Universal Printing PCL 6"
Как менялся логотип Apple на протяжении многих лет. Логотип Apple — это не просто символ,…
Security Boot Fail при загрузке Acer — решение проблемы При загрузке ноутбука Acer с флешки,…
Ноутбук не включается — варианты решения Если при попытке включить ноутбук вы обнаруживаете, что он…
The AC power adapter wattage and type cannot be determined — причины и решение При…
Свистит или звенит блок питания компьютера — причины и решения Некоторые владельцы ПК могут обратить…
Мигает Caps Lock на ноутбуке HP — почему и что делать? При включении ноутбука HP…