0

所以我在工作中从事 IT 工作,我正在尝试将一些日常工作自动化。我们有大约 5 台打印机,我想编写一个脚本来安装所有这些打印机。

最好的方法是什么?什么可能是最简单的语言/库?我在 Python、PHP 和 Javascript 方面相当胜任(显然不适合这个),并且我在 C# 中工作了一点(非常少,主要是 asp.net 的东西),但我不反对选择以另一种语言启动/工作以尝试实现此功能。

据我所见,我的两个主要选择是使用 rundll printui 运行 shell 操作,或者可能使用 COM 对象(我对 COM 的了解有限)。还有其他有效的方法吗?

对不起,如果这个问题有一些主观性 - 如果有人愿意,我很乐意提供我正在尝试编写的伪代码。我也很乐意改进这个问题 - 我尽量不要过于宽泛,但即使经过一些研究,我对实施的理解仍然不完整。

编辑:注意,这主要用于 Windows Vista 和 7。我们有一两台运行 XP 的机器,但它们并不重要,如果需要,可以手动完成。

4

3 回答 3

1

大多数 IT 人员可能会通过 VBScript 或其他方式(以及组策略技巧)使用 PrintUI,但没有理由可以在 Python 中做同样的事情。

使用 PrintUI 进行打印管理的几个很好的资源:

命令行打印机控制

布鲁斯的打印页

在 Python 中,您只需使用subprocess或类似方法进行调用。

作为一个非常简单的示例,将驻留在打印服务器上的网络打印映射到某处:

import subprocess
subprocess.call(r'RUNDLL32 PRINTUI.DLL,PrintUIEntry /gd /c\\computername /n\\printservername\printer')
于 2012-04-10T15:13:30.413 回答
0

在 Windows 系统上,我相信您可以只使用 Print Migrator ( XPVista )。不像编写自己的脚本那样通用,但可能要容易得多。

于 2012-04-10T13:36:34.450 回答
0

迟到了,但也许可以帮助部分答案……如果您使用的是 .inf 文件。在这种情况下是针对本地打印机,

>>>> 要在没有任何向导的情况下执行此操作,必须对驱动程序进行签名。

视窗 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"
  • 对于安装,您只需要一个命令。用usb可以改“com1”,选择最常用的“usb001”。

卸载:

要卸载打印机,您需要 3 个命令并严格遵循以下顺序:

  1. 首先,您需要删除您可以在“设备和打印机”中看到的所有具有该名称的打印机:RUNDLL32 PRINTUI.DLL,PrintUIEntry /dl /n "Printer Name" /h "Intel"
  2. 第二个命令是删除打印机驱动程序:RUNDLL32 PRINTUI.DLL,PrintUIEntry /dd /m "driver model name" /h "Intel". 之后你就看不到打印机和驱动了,但是如果你拔掉usb设备再插上驱动会自动安装。这是因为windows添加了驱动安装包C:\Windows\System32\DriverStore\FileRepository,我们需要用第三条命令卸载它。
  3. 第三个命令将删除安装驱动程序时由 windows 创建的 oem*.inf。要完成此任务,您需要 2 个命令,第一个是搜索 Windows 为您创建的 oem*.inf 的名称:使用此pnputil.exe -e显示所有 oem*.inf 并使用手中的名称使用此pnputil.exe -f -d oem5.inf(更改oem5.inf 对应你的 inf 文件)

我使用 C 和 Visual C++6 以编程方式完成了这些任务 - 使用此命令,除了搜索 oem*.inf 名称,您需要在 .inf 下解析所有 .inf 文件C:\Windows\Inf\。另一个自动化参数是使用 /q 在不通知用户的情况下运行。

使用 cli 安装时需要小心...不要为同一台打印机执行两次安装,Windows 会创建一个随机名称,就像您安装打印机 B 一样,Windows 将重命名为打印机 B (copy_A) 或其他名称如果打印机 B 已经存在。如果您需要卸载,则需要先删除两台打印机,然后再执行第二条命令卸载驱动程序。

对于需要更改参数的远程打印机,请参阅http://technet.microsoft.com/en-us/library/ee624057.aspx

另请参阅有关 devcon 的代码https://code.msdn.microsoft.com/windowshardware/DevCon-Sample-4e95d71c

于 2015-01-13T18:18:09.643 回答