Powershell установка сетевого принтера

Обновлено: 17.05.2024

Ни для кого не секрет, что PowerShell умеет управлять принтерами. Для этого используются как WMI классы, так и COM объекты. При этом управление ими из PowerShell совсем не сложное. WMI представляет следующие классы:

Итак, самое простое - перечисление принтеров:

Здесь я вывожу 2 списка принтеров - которые подключены локально и сетевые принтеры. Фильтрация осуществляется по свойству Local, которое может быть или $true или $false. Так же можно посмотреть, какие принтеры расшарены для других пользователей:

Безусловно, как и остальные классы WMI, класс Win32_Printer позволяет удалённо подключаться к принтсерверу с использованием параметра -ComputerName.

Так же можно посмотреть текущие настройки принтера:

Этой командой я увижу основные параметры качества печати и текущий размер используемой бумаги. Дополнительные свойства описаны в классе Win32_PrinterConfiguration и описывать их тут смысла нету.

Классы Win32_PrinterDriver и Win32_PrinterDriverDll несут лишь справочную информацию о драйверах принтеров и реальное применение им я представляю слабо и рассматривать не буду.

Класс Win32_PrintJob показывает текущее состояние очереди печати принтера. Например, сейчас мой принтер печатает тестовую страницу:

Здесь видно, на какой принтер идёт печать, имя документа, статус печати, размер документа, имя пользователя, от которого производится печать и др. Кстати говоря, параметр JobId показывает количество отправленных заданий с момента последнего перезапуска спулера печати. Так же хочу заметить, что Win32_PrintJob возвращает информацию только при наличии заданий в спулере. Когда принтер простаивает, то данный класс ничего не возвращает.

Теперь настало время поговорить, как подключать новые принтеры и удалять текущие принтеры. Подключать принтеры можно как с помощью WMI, так и с помощью COM:

При этом важно отметить, что при получении объекта Win32_Printer в нём метод AddPrinterConnection не содержится, т.к. данный метод содержится в самом классе Win32_Printer.

Удаление принтера производится при помощи метода Delete:

Таким образом удаляется только один принтер. Все принтеры удаляются без указания фильтра:

Например, недавно на ньюсгруппах был вопрос, как для развёртывания нового принтсервера удалить со всех компьютеров домена. Задача решалась в несколько строк:

На сегодня, я думаю, это всё. Во второй части я планирую поговорить о чтении и установке пермишенов на принтеры с использованием PowerShell.

date

11.03.2019

directory

PowerShell, Windows 10, Windows Server 2012 R2, Windows Server 2016

comments

комментариев 11

Модуль PowerShell: PrintManagement

модуль 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-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

Оказывается, драйвер из inf файла можно добавить только в том случае, если он уже находится в хранилище драйверов DriverStore (подробнее про хранилище можно почитать здесь). Получается, что с помощью команды Add-PrinterDriver установить драйвер, отсутствующий в хранилище драйверов системы нельзя. Для установки драйвера в DriverStore можно воспользоваться:

pnputil.exe установка драйвера печати из inf файла

    из предыдущей статьи;
  • Утилитой 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 установка драйвера печати hp из powershell

Add-PrinterDriver -Name "HP Universal Printing PCL 6"

определяем имя драйвера принтера по inf файлу

Совет. Как узнать, что нужно указывать в поле с именем драйвера печати при установке драйвера через 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

Add-Printer установка нового принтера из powershell

Примечание. Заметьте, что для выполнения этой же операции в случае использования vbs скриптов (Printing Admin scripts) понадобится выполнить две разные команды.
Чтобы переименовать принтер достаточно выполнить команду:

Rename-Printer -Name "hp2050_Office1_Buh" -NewName " hp2050_Salary"

установка нового принтера в windows 10 из командной строки powershell

После выполнения указанных команд в системе появится новый принтер с общим доступом под именем hp2050_Office1_Buh.

Вывод списка принтеров на сервере печати с помощью PowerShell

Выведем полный список принтеров, установленных на данном компьютере:

Как вы видите, команда показывает имя принтера, тип (локальный или сетевой), драйвер, порт печати, открыт ли к принтеру общий доступ и опубликован ли принтер в AD.

Get-Printer вывод списка установленных принтенов на принт сервере

Большинство командлетов модуля 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

Чтобы установить принтер по-умолчанию используйте следующие команды:

Удаление принтера с помощью PowerShell

Чтобы удалить принтер, нужно выполнить такую команду PowerShell:

Remove-Printer -Name "hp2050_Office1_Buh"

Вы можете удалить конкретный драйвер при помощи командлета Remove-PrinterDriver:

Всем привет! интересует такой вопрос - можно ли средствами powershell удаленно устанавливать сетевые принтеры. Например - есть принтсервер \\testprint\ На нем установлены различные принтера и доступны для установки по сети(шаре). Т.е. задача такая, написать скрипт где выбирать необходимый принтер с этого сервера и устанавливать его на удаленный пк. Пробовал через invoke-command отправлять команду на удаленный пк :

Пишет - имя принтера задано не верно.. хотя на локальном пк отрабатывает нормально.

Может кто нибудь знает другие методы? Или что я не так делаю в данном примере?

__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь

Коннект к удалённой машине
может ктонибудь знает благодаря каким компонентам осуществляеться связка с mysql БД, и вообще.

Подключение к удаленной машине
почему я не могу подключиться к удаленной машине. вот код public bool Connect() .


Время на удаленной машине
Доброго времени суток! Необходимо получать время на удаленной машине, что использовать для этого.

Docker-compose на удаленной машине
Подскажите, как правильно производить развертывание приложения с использованием докер. Есть.

Не знаю, как в powershell, но я для таких целей всегда использую батник
Спасибо конечно) я знаю этот метод, но интересует именно средствами powershell )) интересует такой вопрос - можно ли средствами powershell удаленно устанавливать сетевые принтеры.

Если ПК доменные, то удобнее всего решить такую задачу с помощью Group Policy

) я знаю этот метод, но интересует именно средствами powershell )) Ну Вы написали про другие методы, вот я и педложил, кстати, вполне рабочий и достаточно отказустойчивый скрипт. Тогда может подскажете, есть ли возможность запускать этот батник на удаленной машине с моего рабочего места. Т.е. что бы не "беспокоить пользователя" и просто подключить ему нужный сетевой принтер ?)) Тогда может подскажете, есть ли возможность запускать этот батник на удаленной машине с моего рабочего места.

Решение

Тогда может подскажете, есть ли возможность запускать этот батник на удаленной машине с моего рабочего места.

Если GPO воспользоваться не хотите, тогда запускаем "батник" через powershell

newlife_86,
Еще можно закинуть батник в Планировщик.

Спасибо большое! Этот метод сработал, добавляется нужный принтер. Может еще подскажете команду как удалить сетевые принтеры. И еще бы список установленных получать))

Вот только с получением списка сетевых принтеров есть одно, но - если пользователь подключил принтер самостоятельно, то HKLM-ветке его не будет и нужно смотреть в HKCU (HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Devices) каждого пользователя

Получить список сетевых принтеров локально намного проще:

Равно, как и удалить:

это всё понятно, но совсем неинтересно.
а интересно попробовать прикрутить DSC.
или Ansible.
а можно и Ansible + DSC.

дело за мотивацией. вот у меня пока не хватает.

Добавлено через 5 минут
дело ещё и в том, что powershell( и все его производные тоже) мутирует прямо на глазах;
надо подождать, чтобы затвердел и остепенился.

это всё понятно, но совсем неинтересно.
а интересно попробовать прикрутить DSC.
или Ansible.
а можно и Ansible + DSC

Ещё SCCM забыли

Но как я уже здесь писал, при наличие AD, задача из этой темы проще всего решается через Group Policy. Причём вплоть до автоматического подключения принтера в зависимости от номера комнаты пользователя.

Добавлено через 3 минуты

дело ещё и в том, что powershell( и все его производные тоже) мутирует прямо на глазах;
надо подождать, чтобы затвердел и остепенился. Здесь в качестве основного способа подключения предложено - RUNDLL32.EXE - по моему, твёрже уже некуда

Удаление/подключение заработало, спасибо огромное, мне это и нужно было)) а вот с получением списка проблемы
icm -Comp $ComputerName -ScriptBlock < ls "HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Devices"| %>
Такой командой выдает ошибку -
Не удается найти путь "C:\Users\user\Documents\HKEY_CURRENT_USER\Software\Microsof t\Windows NT\CurrentVersion\Devices", так как он не существует.
по моему эта команда ломится на удаленном пк в реестр, но запрашивает ветку с моей учеткой, а не под тем пользователем который сейчас там работает.

Добавлено через 1 час 4 минуты
Подправил путь к реестру, неверно прописал
icm -Comp $ComputerName -ScriptBlock < ls "HKCU:\Software\Microsoft\Windows NT\CurrentVersion\Devices" | %>
В этом случае ни чего не возвращает. Хотя если посмотреть у пользователя в реестре записи есть.

Решение

по моему эта команда ломится на удаленном пк в реестр, но запрашивает ветку с моей учеткой, а не под тем пользователем который сейчас там работает. Подправил путь к реестру, неверно прописал
icm -Comp $ComputerName -ScriptBlock < ls "HKCU:\Software\Microsoft\Windows NT\CurrentVersion\Devices" | %>
В этом случае ни чего не возвращает. Хотя если посмотреть у пользователя в реестре записи есть.

И ещё раз - в HKCU перечисленны принтеры, подключенные пользователем самостоятельно. Если информация о таких принтерах нужна, то получить их список можно примерно так:

Что то я немного запутался, только начинаю изучать Пош. Вообще изначально задача такая была - именно средствами поша (т.к. я пишу форму на нем для управления AD и удаленно Компами в целом) реализовать добавление/удаление принтера на удаленный пк(доменный) и получать список принтеров, актуальный, текущего пользователя на удаленном пк. Т.е. например поступил запрос добавить такой то принтер с принтсервера на такой то ПК. Прежде мне нужно получить список принтеров пользователя, если нужно поудалять лишние и добавить нужный по запросу с установкой его по дефолту.
Если с удалением и добавлением я более менее разобрался(спасибо за команды), а вот со списком беда.. как мне получить список принтеров текущего интерактивного пользователя на удаленном пк. что бы проанализировать что нужно убрать, добавить новый принтер, ну и в дальнейшем так же получать актуальную информацию по принтерам.

Добавлено через 5 минут
Последний приведенный пример действительно получает подключенные принтера пользователя. Но если я добавляю ему принтер удаленно, то он не появлется по моему запросу этой командой. Т.е. выводит те которые были до этого уже установлены.


Домашняя или офисная рабочая сеть состоит не только из компьютеров и ноутбуков, но и из периферийного оборудования, включая и принтеры. Последние используют для распечатки текстовой и графической информации. Чтобы каждый раз не переподключать печатающее устройство к компьютеру, на котором содержатся данные для печати, можно приобрести дорогостоящий принтер, подключаемый к проводному интернету или сети Wi-Fi. Вариант попроще и подешевле, доступный для операционных систем последнего поколения, — подключение сетевого принтера в Windows 10. Как оно выполняется, расскажем в этой статье.

Для чего нужен сетевой принтер

Такой подход актуален для устройств печати, которые нельзя напрямую подключить к интернету: посредством Ethernet-кабеля или беспроводной сети. В противном случае задача ещё упрощается: принтер становится видимым для всех компьютеров в локальной сети и без дополнительных настроек. Оборудование выступает в роли автономного сетевого устройства, и всё, что требуется для печати с рабочего ПК, — нажать кнопку питания и убедиться, что в лотке есть бумага.

С исчезновением из Windows 10 версии 1803 раздела «Домашняя группа» изменился и порядок настроек. Ниже представлен актуальный способ, позволяющий подключить сетевой принтер на операционной системе последнего поколения, а печатать на нём — из Windows 7, 8/8.1 и 10.

Настройка

Подготовительные действия

Перед тем как добавить сетевой принтер, выполните несколько предварительных операций. Они позволяют подготовиться к основной части работы, избежать возможных осложнений и ошибок. Имея в распоряжении включённый компьютер, сделайте следующее:

  • Посмотрите его имя или IP-адрес. Найти информацию можно в разделе «Система», в «Панели управления», или воспользовавшись командной строкой:


  • Разрешите для устройств, находящихся в той же локальной сети, общий доступ к папке. Пропустив этот пункт, вы не сможете пересылать графические и текстовые файлы на целевой принтер.
  • Подключите к компьютеру принтер, отыщите его в списке устройств и запомните (скопируйте или сделайте скриншот) полное наименование. Если ПК или ноутбук не видит периферийное оборудование, сначала решите эту проблему.

Теперь всё готово для того, чтобы настроить сетевой принтер Windows 10. Сделать это можно тремя более или менее простыми способами. Рекомендуем начать с первого: он наиболее лёгок и не требует применения специальных инструментов.

Через меню «Параметры»

Новое меню отчасти заменило «Панель управления», дублируя некоторые системные настройки. Со временем оно призвано полностью заменить исходный инструмент управления, пока же позволяет, в частности, настроить печатающее устройство так, чтобы оно было доступно с любого локального компьютера — за несколько минут и без глубоких познаний в области информационных технологий.

Чтобы узнать, как добавить сетевой принтер в Windows 10, следуйте инструкции:

  • Откройте меню «Пуск».
  • Найдите в самом левом столбце пиктограмму-«шестерёнку». Щёлкнув по ней, перейдите в «Параметры».
  • Оказавшись в общем списке, зайдите в раздел «Устройства».


  • При помощи бокового столбца слева откройте вкладку «Принтеры и сканеры».


  • Выберите вариант «Добавить принтер или сканер».


  • На следующей странице отметьте, щёлкнув по ссылке, что нужного вам принтера нет в списке.


  • Пользуясь формой добавления нового устройства, установите кружок возле пункта «Выбрать общий принтер по имени». В свободном текстовом поле впишите путь к устройству в формате \\ИМЯ_ПК\НАИМЕНОВАНИЕ_ПРИНТЕРА или \\IP-АДРЕС_ПК\НАИМЕНОВАНИЕ_ПРИНТЕРА. проверьте правильность написания и нажмите «Далее».


  • Вместо способа, описанного в пункте 7, можете нажать «Обзор» и найти свой принтер в разделе «Сеть».
  • Подождите, пока устройство будет установлено в качестве сетевого. При необходимости подтвердите установку драйвера.
  • По завершении настроек вы сможете задать использование этого принтера по умолчанию, а также запустить пробную печать.


Настройка сетевого принтера через PowerShell

Утилита, называемая PowerShell и представляющая собой улучшенную версию командной строки, также даёт ответ на вопрос, как настроить сетевой принтер в Windows 10. Приложение содержится в операционной системе по умолчанию, не нуждается в установке и модификации. Чтобы добавить «общее» устройство, воспользуйтесь алгоритмом:

  • Запустите Windows PowerShell. Чтобы найти утилиту, вызовите меню «Пуск» и начните печатать название — или воспользуйтесь расположенной рядом пиктограммой лупы.


  • Дождитесь загрузки приложения и введите команду Add-Printer -ConnectionName “\\ИМЯ_ПК\НАИМЕНОВАНИЕ_ПРИНТЕРА”. Чтобы запрос имел силу, обязательно используйте косые чёрточки и кавычки. Проверьте правильность написания и нажмите Enter.


  • Вместо блока «ИМЯ_ПК» можете подставить IP компьютера. Тогда команда будет иметь вид: Add-Printer -ConnectionName “\\IP-АДРЕС_ПК\НАИМЕНОВАНИЕ_ПРИНТЕРА”.

После применения команды обновите рабочий стол или перезапустите компьютер. Сетевой принтер, если вы правильно указали путь к нему, появится на всех подключённых локальных машинах.

Через «Панель управления»

Этот инструмент по-прежнему доступен в современных поколениях ОС. Можете воспользоваться и им, чтобы узнать, как установить сетевой принтер на Windows 10. Следуйте инструкции:

  • Откройте «Панель управления». Можете найти ярлык в меню «Пуск» или при помощи системного поиска.
  • Для большего удобства переключитесь на способ отображения «Крупные значки». Зайдите в категорию «Устройства и принтеры».
  • Воспользуйтесь кнопкой «Добавление принтера», размещённой в верхней панели нового окна.


  • На запрос ОС ответьте, что нужный вам принтер отсутствует в общем списке.
  • Повторите действия, описанные для меню «Параметры», начиная с 7-го пункта.

В результате вы получите полностью готовый к работе сетевой принтер. Он будет доступен только для компьютеров, подключённых к одной сети. Менять настройки после добавления нового ПК нет нужды — печатающее устройство автоматически появится в списке. А если захотите переставить принтер к другой машине — просто повторите для неё все описанные действия!

Я думаю, многим системным администраторам известны описанные в заголовке мфу, отличаются они, в первую очередь, не очень удобной установкой и от этого имеют дурную славу. Однажды, копируя на очередной компьютер сквозь узкий канал пакет fullsolution для мфу весом около 300 мегабайт, идея разобрать этот инсталлятор и автоматизировать установку вылезла попапом на глаза — работу пришлось приостановить.


Разбором драйвера я занимался уже около полутора лет назад, в то время интернет на эту тему был совершенно пуст. Сейчас быстро погуглил по теперь уже известным мне ключевым словам утилит и нашел немного разрозненной информации. Несмотря на это, я решил. что собранная в одно место информация все равно не помешает, при том, что в этом посте она более полная.

Настроим печать

Первым на запрос по snmp показался мфу HP LaserJet 1536, с него и решил начать. Для начала нужно понять. как его подключать как принтер под Windows 7; пожилую XP отбросил сразу, свежую Windows 8 в домене, есть мнение, мне не увидеть никогда. Вот и повод познакомиться с новым для себя PowerShell, подумал я, который в итоге был чуть ли не основной мотивацией в разборе драйвера. Подключение ip-принтера в Windows 7 состоит из трех этапов (в Windows 8 всё сильно упрощается встроенными командлетами, но про нее я уже говорил — не судьба), сначала создаем ip-порт, потом добавляем драйвер и подключаем, собственно, принтер. Для всех этих этапов в Windows есть уже готовые VBS скрипты, многим, я думаю, знакомые, в Windows 7 путь к ним: С:\Windows\System32\Printing_Admin_Scripts\

Начну с создания порта, этот этап самый простой, имя присвоим такое же как ip:
cscript C:\Windows\System32\Printing_Admin_Scripts\ru-RU\prnport.vbs -a -r "192.168.0.30" -h "192.168.0.30" -o RAW -n 9100

Добавление драйвера:
cscript C:\Windows\System32\Printing_Admin_Scripts\ru-RU\prndrvr.vbs -a -m "HP LaserJet M1530 MFP Series PCL 6" -e "Windows NT x86" -h "C:\drivers\1536\"-i "C:\drivers\1536\hpc1530c.inf"


Тут стоит отметить одну важную особенность: имя принтера должно указываться точно так же как оно прописано в inf файле драйвера, ради примера уберите часть имени, скрипт выдаст ошибку: «Не удалось добавить драйвер принтера HP LaserJet Код ошибки Win32 87».

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


Теперь осталось подключить принтер, для этого я остановился на замечательной программе printui, советую посмотреть на нее поближе, у нее есть интересные ключи.
&rundll32 printui.dll,PrintUIEntry /if /b "HP LaserJet M1530 MFP Series PCL 6" /r "192.168.0.30" /m "HP LaserJet M1530 MFP Series PCL 6" /u /K /q /Gw

Пришло время оформить все это в примерно следующего вида скрипт на PowerShell:


Сканирование

Копаясь в inf файлах драйвера, для поиска правильного имени принтера и попутно вообще разбираясь в структуре драйвера HP, глаз зацепился за следующие строки (выделил жирным):

;Windows Vista
[HP.NT.6.0]
«HP LJ M1530 MFP Series Scan»= WIA_1530_Inst.NT.6.0, USB\vid_03f0&pid_012a&mi_00
«HP LJ M1530 MFP Series Scan»= WIA_1530_NW.NT.6.0,vid_03f0&pid_012a&IP_SCAN

;Windows Vista 64
[HP.NTAMD64.6.0]
«HP LJ M1530 MFP Series Scan»= WIA_1530_Inst_Vista64, USB\vid_03f0&pid_012a&mi_00
«HP LJ M1530 MFP Series Scan»= WIA_1530_NW_Vista64,vid_03f0&pid_012a&IP_SCAN

Тут бы хотелось лирики (казалось бы, при чем тут 1С? если вы понимаете о чём я), но опущусь до сухой констатации: попробуем devcon.exe.

DevCon — это программа с интерфейсом командной строки, которая используется в качестве альтернативы диспетчеру устройств С ее помощью можно включать, выключать, перезапускать, обновлять, удалять и опрашивать отдельные устройства или группы устройств. Программа DevCon также предоставляет необходимые разработчику драйвера сведения, которые недоступны с помощью диспетчера устройств.

Добавляем устройство по ID указав драйвер:

.\devcon.exe /r install C:\drivers\1536scan\hppasc16.inf "vid_03f0&pid_012a&IP_SCAN"

Добавляем в реестр необходимые параметры, запускаем сканирование и… Бинго!
Сканер отлично работает, осталось все это оформить.

Настройки сканера в реестре хранятся по следующим путям:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\Root\IMAGE

Опытным путём определяем необходимые нам ключи реестра:



Для того что бы удобно добавить настройки реестра, создадим процитированный ниже файл, который послужит нам шаблоном для модификации внутри скрипта.

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\\_ITEM_\DeviceData]
«NetworkDeviceID»="\\hostname:_NETWORK_NAME_.domain.local\\ipaddr:_IP_ADDRESS_\\guid:\\macaddr:_MAC_ADDRESS_\\port:1"
«PortID»="_IP_ADDRESS_"
«NetworkHostName»="_NETWORK_NAME_.domain.local"
«TulipIOType»=dword:00000005

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\Root\IMAGE\_ITEM_\Device Parameters]
«NetworkDeviceID»="\\hostname:_NETWORK_NAME_.domain.local\\ipaddr:_IP_ADDRESS_\\guid:\\macaddr:_MAC_ADDRESS_\\port:1"
«PortID»="_IP_ADDRESS_"
«NetworkHostName»="_NETWORK_NAME_.domain.local"
«MAC»="_MAC_ADDRESS_"
«PortNumber»=«1»
«Index»="_ITEM_"

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

Потираем руки, проверяем — работает, модифицируем под 1522 — работает, победно правим под 3055 — облом…
Сканер не дает выбрать планшет, в меню сканирования доступен только податчик, да и тот отказывается сканировать.


Серьезный разговор с 3055 или, Чувак ты поднял на гору не тот камень


Вот он, LaserJet 3055/3052 — самый вредный парень, на удивление вижу я его чаще всех. На самом деле — скажу по секрету — я начал заниматься им первым — пошел через дебри фильтрации вывода procmon при установке драйвера для поиска чего-нибудь интересного и утонул где-то посередине. Когда очередной раз procmon упал из-за нехватки памяти, я решил отложить эту затею до более дружелюбного и спокойного состояния.

Второй набег на разбор установщика МФУ дал результат: спустя часа полтора разбора логов в недрах вывода установщика была найдена жемчужина — hppniscan01.exe
Запуск с необходимыми параметрами моментально установил сканер в устройства и прописал необходимые ветки реестра:
hppniscan01.exe -f "hppasc16.inf" -m "vid_03f0&pid_012a&IP_SCAN" -a "192.168.0.30" -n 1


В дистрибутивах драйверов других принтеров HP есть ее шестидесяти четырех разрядная версия, драйвер 3055 же поддерживает только x86 операционные системы.

Драйвера сканера я решил выдернуть из общей папки драйверов и сложить отдельно, необходимые файлы легко читаются из inf-файла драйвера. Дерево получилось следующего вида:

C:\Drivers\Scanners\ip\3055scan\hpgtpusd.dll
C:\Drivers\Scanners\ip\3055scan\hppasc01.cat
C:\Drivers\Scanners\ip\3055scan\hppasc01.dll
C:\Drivers\Scanners\ip\3055scan\hppasc01.inf
C:\Drivers\Scanners\ip\3055scan\hppniscan01.exe
C:\Drivers\Scanners\ip\3055scan\hpptpml3.dll
C:\Drivers\Scanners\ip\3055scan\hpxp3390.dll
C:\Drivers\Scanners\ip\3055scan\Drivers\dot4
C:\Drivers\Scanners\ip\3055scan\Drivers\dot4\Win2000\hpzidr12.dll
C:\Drivers\Scanners\ip\3055scan\Drivers\dot4\Win2000\hpzipm12.dll
C:\Drivers\Scanners\ip\3055scan\Drivers\dot4\Win2000\hpzipr12.dll
C:\Drivers\Scanners\ip\3055scan\Drivers\dot4\Win2000\hpzipr12.sys

Функция установки сканера теперь стала совсем простой, хоть и с зависимостью от внешней компоненты.
Итоговый вид скрипта, с некоторыми захардкоженными упрощениями, примет следующий вид:

Этот же способ отлично подходит для всех оказавшихся вокруг меня МФУ от HP, для которых я создал отдельные папки с драйверами и варианты выбора в свитче функции установки сканера.

Список файлов драйвера можно посмотреть в разделах inf-файла с именами [SourceDisksFiles], [RegisterDlls], [WIA_CopyFiles] и далее по файлу. Скриншот по драйверам 3055 и 1536, для наглядности:


Из описанных в этой заметке отрывков кода можно собрать полноценный скрипт автоматической установки МФУ, а если добавить в него немного гуя и snmp, то можно вообще навсегда закрыть для себя тему установки МФУ на новые машины.

На этом на сегодня всё, спасибо за внимание. Если в комментариях подскажут чего не хватает МФУ 3055 для работы при установке первым способом посредством devcon, буду сильно благодарен. Может быть кто-то проделал ту же работу, что и я, но добился больших успехов.

В следующей части, если кто-то кинет таки инвайт в песочницу, покажу как расширить наш сценарий для работы с МФУ Xerox и Kyocera.

Читайте также: