Windows получить список принтеров

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 можно воспользоваться:

Читайте также:  Пишет система windows не активирована

  • 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 служит в основном для получения сведений о системе и установленном оборудовании, соответственно, использовать ее можно для получения списка принтеров как физических, так и виртуальных. Запускается она в среде классической командной строки.

Читайте также:  Как устанавливать windows для нетбуков

Откройте последнюю и выполните в ней команду:

В результате на рабочем столе у вас будет создан текстовый файл 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) Коротко самые основные параметры:

Читайте также:  Malware anti malware linux

За «вне сети» отвечает параметр «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».

Оцените статью