2012-04-10 4 views
0

Так что я работаю в ИТ на работе, и я пытаюсь автоматизировать некоторые обычные вещи. У нас около 5 принтеров, и я бы хотел написать сценарий, который будет устанавливать их все.Наиболее эффективный способ установки нескольких принтеров программно

Что было бы лучшим способом сделать это? Что, возможно, было бы самым простым языком/библиотекой? Я достаточно компетентен в Python, PHP и Javascript (не идеально подходит для этого, очевидно), и я немного поработал на C# (очень минимально, и в основном asp.net), но я не против выбора вверх/работа на другом языке, чтобы попытаться реализовать эту функцию.

Из того, что я вижу, мои две основные опции либо запускают операцию оболочки с, скажем, rundll printui, либо, возможно, с использованием COM-объектов (мои знания о COM ограничены). Есть ли другие эффективные способы?

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

EDIT: Обратите внимание, что это в основном для Windows Vista и 7. У нас есть одна или две машины под управлением XP, но они некритичны и, если нужно, могут быть выполнены вручную.

ответ

0

В системе Windows я считаю, что вы можете просто использовать Print Migrator (, Vista). Не совсем так, как для вашего собственного скрипта, но, вероятно, намного проще.

+0

Eh, возможно, хотя я не думаю, что это, вероятно, слишком сложно из задачи. Я предполагаю, что через 3-4 часа я действительно понимаю, какой вопрос я пытаюсь решить. Я проверю это, но все равно хочу программное решение. –

1

Большинство ИТ-ребята, вероятно, будут использовать PrintUI через VBScript или что-то (наряду с трюками групповой политики), но нет причин, по которым вы можете сделать то же самое в Python.

Пара хороших reasources для управления печатью с использованием PrintUI:

Command Line Printer Control

Bruce's Printing Pages

В Python вы бы просто использовать subprocess или подобное, чтобы сделать звонки.

В очень простом примере, чтобы отобразить сетевую печать, находящийся на сервере печати где:

import subprocess 
subprocess.call(r'RUNDLL32 PRINTUI.DLL,PrintUIEntry /gd /c\\computername /n\\printservername\printer') 
0

поздний, но, возможно, может помочь в часть ответа ... если вы используете .inf файл. В этом случае для локальных принтеров

>>>> Для этого без какого-либо мастера драйвер должен быть подписан.

Windows 7:

УСТАНОВКА:

  • Первая команда установки: RUNDLL32 PRINTUI.DLL,PrintUIEntry /if /b "Printer name" /f "driver.inf" /r "com1" /m "driver model name" /h "Intel"
  • Второй набор команд принтера по умолчанию: RUNDLL32 PRINTUI.DLL,PrintUIEntry /y /n "Printer name"
  • Для установки вам нужно только одну команду. Можете изменить «com1», если вы используете usb, выбрали наиболее комм «usb001».

УДАЛЕНИЕ:

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

  1. Первое, что вам нужно удалить все принтеры с этим именем, которое вы можете увидеть в " устройство и принтеры »: RUNDLL32 PRINTUI.DLL,PrintUIEntry /dl /n "Printer Name" /h "Intel"
  2. Вторая команда - удалить драйвер принтера: . После этого вы не сможете увидеть принтер и драйвер, но если вы отключите USB-накопитель и снова подключите его, драйвер автоматически установится. это потому, что окна добавляют установочный пакет драйвера к C:\Windows\System32\DriverStore\FileRepository, и нам нужно удалить его с помощью третьей команды.
  3. Третья команда удалит oem * .inf, который создается при установке Windows при установке драйвера. Для выполнения этой задачи вам понадобятся две команды, первая - поиск имени oem * .inf для окон, созданных для вас: используйте это pnputil.exe -e, чтобы показать все oem * .inf, и с именем в руках используйте это pnputil.exe -f -d oem5.inf (измените имя oem5.inf, чтобы соответствовать вам inf файл)

Я сделал thoses taks программно с помощью C и Visual C++ 6 - с помощью этих команд, кроме поиска имени oem * .inf, которое вам нужно проанализировать все .inf файлы под C:\Windows\Inf\. Другим параметром для автоматизации является использование/q для запуска без уведомления пользователя.

Существует потребность в том, что вам нужно заботиться при использовании cli для установки ... не выполняйте две установки для одного и того же принтера, окна создадут случайное имя, как вы устанавливаете принтер B, и окна переименуют на принтер B (copy_A) или что-то еще, если принтер B уже существует. И если вам нужно удалить, вам нужно будет удалить два принтера, прежде чем переходить ко второй команде, чтобы удалить драйвер.

Для удаленных принтеров нужно изменить paramters см http://technet.microsoft.com/en-us/library/ee624057.aspx

Также см код о DevCon https://code.msdn.microsoft.com/windowshardware/DevCon-Sample-4e95d71c

Смежные вопросы