- PowerShell: управление принтерами и драйверами печати в Windows 10 / Server 2016
- Модуль PowerShell: PrintManagement
- Установка драйвера печати в хранилище драйверов
- Установка нового принтера с помощью PowerShell
- Вывод списка принтеров на сервере печати с помощью PowerShell
- Подключение сетевого принтера из PowerShell
- Удаление принтера с помощью PowerShell
- Как в Windows 10 получить список установленных принтеров
- Получить список принтеров в сети
- Решение
- Выяснить сколько доступных для печати принтеров и их марку
- Решение
- Решение
- Решение
- Решение
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.
Подробную информацию о синтаксисе конкретной команды можно получить так:
Примеры использования команд:
Рассмотрим несколько примеров типовых сценариев управления принтерами в Windows 10 из PowerShell.
Установка драйвера печати в хранилище драйверов
Чтобы вывести список драйверов печати, который установлены в хранилище драйверов Windows:
Уставим в системе новый драйвер печати, например, HP Universal Printing PCL 6. Согласно документации, команда PowerShell для добавления драйвера должна быть такой:
Add-PrinterDriver -Name «HP Universal Printing PCL 6» -InfPath «C:\Distr\HP-pcl6-x64\hpcu118u.inf»
Однако при попытке установить драйвер подобным образом появляется ошибка:
Оказывается, драйвер из 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
Выведем полный список принтеров, установленных на данном компьютере:
Как вы видите, команда показывает имя принтера, тип (локальный или сетевой), драйвер, порт печати, открыт ли к принтеру общий доступ и опубликован ли принтер в 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»
Как в Windows 10 получить список установленных принтеров
Все установленные в Windows 10 принтеры отображаются в разделе «Устройства» приложения Параметры, так что просмотреть их список не составляет никакого труда. Другое дело, если вам нужно его сохранить в файл или тем более отправить по сети. Чтобы не создавать скриншоты и не переписывать названия принтеров вручную, в таких случаях вы можете воспользоваться консольной утилитой WMIC или PowerShell .
Появившаяся еще в Windows 2000, штатная тулза WMIC служит в основном для получения сведений о системе и установленном оборудовании, соответственно, использовать ее можно для получения списка принтеров как физических, так и виртуальных. Запускается она в среде классической командной строки.
Откройте последнюю и выполните в ней команду:
В результате на рабочем столе у вас будет создан текстовый файл printers.log с содержимым, доступным для просмотра в любом текстовом редакторе.
Вывод сведений о принтерах через WMIC поддерживается также и PowerShell , но в данном случае лучше использовать собственные возможности инструмента, а именно командлет Get-Printer .
Целиком команда получения принтеров будет выглядеть следующим образом:
Чтобы структурировать содержимое лога, можете добавить в команду параметр Format-Table, тогда данные будут выведены в табличном виде.
Кстати, формат LOG взят нами чисто для примера, если вам удобнее, можете использовать более привычный и распространенный формат TXT .
Приведенные выше способы вывода установленных принтеров работают не только в Windows 10, но и в Windows 8.1.
Получить список принтеров в сети
Получить список принтеров, установленных на удалённом компьютере
Здравствуйте. Нужно вывести на экран список установленных принтеров с удалённого компьютера.
Список активных принтеров в сети
Всем привет! Подскажите, как можно вывести список активных (доступных) принтеров в сети(сетевых).
Получить список принтеров
Подскажите пожалуйста как получить вручную список принтеров чтобы вывести их на экран. Гугл пока ни.
Получить список принтеров (C#)
Привет всем. У меня сложилась определеная проблема. Нада отправить текстовый файлик на печать.
Решение
Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.
Получить список доступных принтеров
Печатаю форму методом UserForm.PrintForm Подскажите, пожалуйста, как: 1. Получить список.
Получить список принтеров с принт-сервера
Возможно ли получить список принтеров,их ip адрес, которые находиться на принтсервере? вывести в.
Как получить все ip адреса в локальной сети (особенно принтеров)
Допустим, есть локальная сеть в ней несколько компьютеров и сетевых принтеров, пробовал сначала.
Как получить список принтеров и очистить очередь печати выбранного принтера?
Как получить список принтеров и очистить очередь печати выбранного принтера? Вторая часть.
Получить список компьютеров в сети
Доброго времени суток. Как получить список компьютеров в сети и произвести листинг открытых.
Выяснить сколько доступных для печати принтеров и их марку
Список доступных принтеров
Доброе время суток! Прошу сильно не пинать. в основном то я по Delphi, но нужда заставила по.
Получить список доступных принтеров
Печатаю форму методом UserForm.PrintForm Подскажите, пожалуйста, как: 1. Получить список.
Правильная настройка устаревших принтеров для печати из Windows Server 2008 terminal Server
Уважаемые админы — тема весьма щепетильна, но спасительного решения так до сих пор и не найдено (на.
Обеспечение печати 2 принтеров
Помогите решить проблему , нужно обеспечить печать на 2 принтера причем одновременно, подскажите.
спасибо, смотрю, порылся у себя в записях, нашёл
ActivePrinter = «\\NAME\Printer»
Имя принтера нужно указывать вместе с путём и с точностью до символа. В результате выполнения этой команды принтер по умолчанию будет переназначен
Что написал сам не знаю, никто не знает, что имелось ввиду?
Добавлено через 11 минут
ну нет, у меня формы пока так пробую
Решение
Решение
Ципихович Эндрю, Вы хотели спросить — включен или нет?
(в Win7 и др. версиях терминология немного отличается (у меня пишет «Свободен», при чем даже когда отключен. Этот статус напрямую связан с состоянием печати).
Вот описание WMI-класса на MSDN http://msdn.microsoft.com/en-u. s.85).aspx
(как то через API мне это написать сложновато).
Подлатал. Итого:
1) Коротко самые основные параметры:
За «вне сети» отвечает параметр «workoffline».
Также интересен «Attributes», если его распарсить согласно числовым константам.
А вот сравнительный анализ атрибутов «Реального» и «Виртуального» принтера (3 раза клацните, чтобы увидеть в нормальном качестве).
Делайте выводы.
Решение
у кого много-много принтеров,
потестируйте?
спасибо. выглядит хоть не страшно, про товарища
Существуют несколько видов портов.
С помощью библиотеки «winmgmts» я получил порт принтера: «XPSPort:». А программа «Excel» выдаёт вот такое: «Microsoft XPS Document Writer (Ne00:)».
Т.е. получается средствами библиотеки «winmgmts» нельзя получить нужное название порта для того, чтобы печатать через «Excel»?
У меня Excel выдает именно порт «XPSPort:»
P.S. «winmgmts» — это служба или в данном случае моникер WMI в составе запроса (через него мы получаем доступ к инструментарию).
Порт вида Ne00: нужен для печати по сети.
Сейчас в интернете читал, но не пробовал, пишут, что можно по имени принтера печатать (без указания порта) в команде PrintOut.
Но хотелось бы всё-так получить простое решение, чтобы менять активный принтер в программе «Excel». Это нужно для того, чтобы после выбора принтера, перед печатью проверить: не изменились ли разрывы страниц в Excel-книге, т.к. Excel-книга подстраивается под принтер по умолчанию или под принтер, на который печатали последний раз. Для одного принтера разрывы страниц будут находиться в одном месте, а для другого — в другом (такое редко бывает, но бывает).
Решение
Скрипт, в нужном Вам виде информацию возвращает API-функция EnumPrinters.
Готовая реализация находится в теме Изменение настроек выбранного принтера Excel из VBA
Модуль называется PrinterFind_EnumPrinters. Тестовый запуск — через Private Sub Test()
Добавлено через 34 минуты
Да, так и есть PrintOut может работать без указания порта.
При указании несуществующего принтера, печать будет продолжена на принтере, выставленном по-умолчанию.
Возможно, при переразметке страницы имеет смысл установить свойство Preview (предварительный просмотр) в true.
В любом случае порядок нумерации сетевых портов идет в том же порядке, как и получение списка принтеров через WMI. Т.е. Вы можете смело завести самостоятельно счетчик с 0, например, в моем коде (пост № 6) строки №№ 27,28,36,37 закомментировать и получите тоже самое значение, добавив префикс Ne.
application.activeprinter в роле Write-свойства наоборот может принимать только имя принтера с портом вида NeXX:
API-функция «EnumPrinters» возвращает данные в виде числа (или чисел). Поэтому при использовании API-функции «EnumPrinters», нужно применить ещё две API-функции, чтобы расшифровать эти числа. Кроме того, функция «EnumPrinters» возвращает имя порта в таком же виде, как и библиотека «WinMgmts». Т.е. для моей задачи API-функция «EnumPrinters» не подходит.
В этом примере: Изменение настроек выбранного принтера Excel из VBA — автор темы показывает только как получить список имён принтеров с помощью API-функции «EnumPrinters» и не показывает, как получить список портов принтеров.
Имя порта в нужном виде для программы «Excel» можно получить с помощью API-функции «GetProfileString». Может быть это единственный вариант получения имя порта принтера в нужном для программы «Excel» виде. Только «GetProfileString» является старой и осталась в «Windows» для совместимости с 16-разрядными версиями «Windows».