环境说明:
- 打印机是在局域网中一台打印服务器共享的打印机
- 需要添加打印机的系统为win7x64。因打印机比较老,没有win7x64的驱动程序,咨询厂家得到下面的解决办法:
正常手动添加打印机的步骤:
- 【添加打印机】
- 【添加本地打印机】
- 【创建新端口】
- 【端口类型:Local Port】
- 【输入端口名:
\\\192.168.1.8\HPLaserJ
】 - 选择厂商【HP】
- 打印机选择【HP LaserJet 3050 PCL5】
- 一直下一步完成。
批处理解决过程:
获取打印机端口号:
- 先按照常规的方法添加一次打印机
- 然后点击【开始】-【运行】-输入
regedit
打开【注册表编辑器】 - 搜索端口
\\\192.168.1.8\HPLaserJ
得到下面两条记录:
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\Ports
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Ports
在这个路径下面有一个【字符串值】,名字都是刚才添加打印机用的端口。
经验证发现两条是关联的,修改一条,另外一条也会更改。
获取打印机驱动文件:
- 打印机上面点击右键,在弹出的菜单中选择【打印机属性】
- 然后点击【关于标签】
- 在驱动【程序文件(R)】列表下面有用到的相关驱动文件;
- 我选择了第一个作为搜索条件【HPC3050F.GPD】
- 打开我的电脑进入【C盘(系统盘)】搜索关键词【HPC3050F】
- 得到了一个inf的文件是【C:\Windows\inf\prnhp002.inf】
添加打印机的脚本
端口号有了,inf驱动文件也有了。剩下的就好解决了。
@echo off
echo;添加HP LaserJet 3050 打印机
ver|find "6.1">nul&& goto :win7
rem 环境中只有两种系统,不是win7就是xp
echo;添加中
rundll32 printui.dll,PrintUIEntry /in /u /z /q /n "\\SZ-打印机\HPLaserJ"
echo;设置默认打印机中
rundll32 printui.dll,PrintUIEntry /y /n "\\SZ-打印机\HPLaserJ"
echo;操作完成。
echo;按任意键退出。
pause>nul&exit
:win7
echo;
echo;添加端口:&echo;------------------------
reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Ports" /s |find "\\172.16.12.8\HPLaserJ" >nul 2>nul
if %errorlevel% equ 0 (
echo;端口已存在。) else (
REG ADD "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Ports" /v \\172.16.12.8\HPLaserJ /t REG_SZ /f
)
echo;
echo;添加打印机:&echo;------------------------
(for /f "skip=5 tokens=7 delims=\" %%i in ('reg query HKLM\SYSTEM\CurrentControlSet\Control\Print\Printers') do echo %%i)|find "HP LaserJet 3050">nul 2>nul
if %errorlevel% equ 0 (
echo;HP LaserJet 3050已存在。) else (
echo;正在添加中。。。
rundll32 printui.dll,PrintUIEntry /if /b "HP LaserJet 3050 PCL5" /f C:\Windows\inf\prnhp002.inf /r "\\172.16.12.8\HPLaserJ" /m "HP LaserJet 3050 PCL5" /z
echo;正在设置为默认打印机
rundll32 printui.dll,PrintUIEntry /n "HP LaserJet 3050 PCL5" /y
)
echo:&echo;操作完成。
echo;
echo;按任意键退出。
pause>nul&exit
别的方法实现自动安装打印机:printer management
在网上搜到另外一个更好的方法,不过该方法需要有驱动才行,未做测试,留下备用。
第一步: 在机器上安装,共享打印机.(使用print management必须是打印服务器的本地打印机)
- 在您的服务器上打印机的驱动.
- 分别共享这台打印机
- 分别尝试用去连接这台打印机,确认都已经被正确的共享了
- 分别右键”控制面板\打印机”下面的打印机,点属性.
- 检查属性”共享”选项卡,其中 “列入目录”都已经勾上了.
第二步:在服务器安装printer management
- 用域管理员身份登录服务器
- 打开 “控制面板\添加删除程序”
- 点击 “添加删除windows组件”
- 双击 “管理和监视工具\打印管理组件”
- 完成安装.
第三部:配置打印管理
- 用域管理员身份登录服务器
- 打开”管理工具\打印管理”
- 右键 “驱动程序”选择”管理驱动程序”
- 点击打印机,然后按”添加”.
- 安装上您域中机器需要用到的驱动.
- 应用这些配置.
第四部:部署打印机
- 用域管理员身份登录服务器
- 打开”管理工具\打印管理”
- 点击”打印机”
- 在右面的窗口中,选择一台打印机,右键它并且选择”从组策略部署”
- 在新窗口中点击”浏览”,选择一个合适的组策略来部署. 如果您需要部署到整个域的话,只要选择”默认域策略(Default domain policy)”
- 完成之后,您可以在下面的”已部署的打印机中看到”
- 检查默认组策略中, 打印部署相关的项是否正确添加了.
- 确认无误之后,客户端下一次重新启动就会自动安装上这台打印机了
PrintUIEntry的详细参数说明
用法: rundll32 printui.dll,PrintUIEntry [options] [@commandfile]
/a[file] 二进制文件名
/b[name] 基本打印机名
/c[name] 如果操作在远程机器上,unc 机器名
/dl 删除本地打印机
/dn 删除网络打印机连接
/dd 删除打印机驱动程序
/e 显示打印首选项
/f[file] inf 文件或输出文件
使用 /f 指定的 INF 文件可能依赖的 INF 文件的 /F[file] 位置
/ga 添加每个机器打印机连接(用户登录时此连接将传播到用户)
/ge 枚举每个机器打印机连接
/gd 删除每个机器打印机连接(用户登录时此连接将被删除)
/h[arch] 驱动程序体系结构,为下列之一: x86 或 x64 或 Itanium
/ia 用 INF 文件安装打印机驱动程序
/id 用添加打印机驱动程序向导安装打印机驱动程序
/if 用 INF 文件安装打印机
/ii 用带 INF 文件的添加打印机向导安装打印机
/il 用添加打印机向导安装打印机
/in 添加网络打印机连接
/ip 使用网络打印机安装向导安装打印机
/j[provider] 打印提供程序名称
/k 将测试页打印到指定的打印机,不能安装打印机时的命令组合
/l[path] 打印机驱动程序源路径
/m[model] 打印机驱动程序型号名
/n[name] 打印机名
/o 显示打印机队列查看
/p 显示打印机属性
/q 安静模式,不显示错误信息
/r[port] 端口名
/s 显示服务器属性
/Ss 将打印机设置存到一个文件
/Sr 从一个文件还原打印机设置
储存或还原必须放在命令结尾的打印机设置选项标志:
2 PRINTER_INFO_2
7 PRINTER_INFO_7
c 颜色配置文件
d 打印机数据
s 安全描述符
g 全局 DevMode
m 最低设置
u 用户 DevMode
r 解决名称冲突
f 强制使用名称
p 解析端口
i 驱动程序名称冲突
/u 如果已安装,则使用现有的打印机驱动程序
/t[#] 起始的以零为基础的索引页
/v[version] 驱动程序版本,为下列之一:“类型 2 - 内核模式”或“类型 3 - 用户模式”
/w 如果在 INF 中找不到指定的驱动程序,则提示用户
/y 将打印机设置为默认打印机
/Xg 获得打印机设置
/Xs 设定打印机设置
/z 不要自动共享这台打印机
/Z 不要自动生成打印机名
/K 更改 /h 的含义,使 x86 或 x64 或 Itanium 接受 2、3、4,并更改 /v 的含义,使“类型 3 - 用户模式”接受 3
/Z 共享这台打印机,只能跟 /if 选项一起使用
/? 帮助信息
@[file] 命令行参数文件
/Mw[message] 确认命令之前显示警告消息
/Mq[message] 确认命令之前显示确认消息
/W[flags] 指定向导(APW 和 APDW)的标志和切换
r 使向导可以从上一页重新启动
/G[flags] 指定全局标志和切换
w 抑制安装程序驱动程序警告 UI (超级静声模式)
例如:
运行服务器属性:
rundll32 printui.dll,PrintUIEntry /s /t1 /c\\machine
运行打印机属性:
rundll32 printui.dll,PrintUIEntry /p /n\\machine\printer
本地运行添加打印机向导:
rundll32 printui.dll,PrintUIEntry /il
在 \\machine:
rundll32 printui.dll,PrintUIEntry /il /c\\machine 运行添加打印机向导
运行队列查看:
rundll32 printui.dll,PrintUIEntry /o /n\\machine\printer
运行 INF 安装:
rundll32 printui.dll,PrintUIEntry /if /b "Test Printer" /f c:\infpath\infFile.inf /r "lpt1:" /m "Brother DCP-128C"
运行 INF 安装(具有 INF 依赖关系)。在此示例中,prnbr002.inf 依赖于 ntprint.inf
rundll32 printui.dll, PrintUIEntry /ia /m "Brother DCP-128C" /K /h x64 /v 3 /f "c:\infpath\prnbr002.inf" /F "c:\infpath\ntprint.inf"
使用 INF 运行添加打印机向导:
rundll32 printui.dll,PrintUIEntry /ii /f c:\infpath\infFile.inf
使用内置打印机驱动程序添加打印机:
rundll32 printui.dll,PrintUIEntry /if /b "Test Printer" /r "lpt1:" /m "Brother DCP-128C"
添加每个机器打印机连接(用户登录时此连接将传播到用户):
rundll32 printui.dll,PrintUIEntry /ga /c\\machine /n\\machine\printer /j"LanMan Print Services"
删除每个机器打印机连接(用户登录时此连接将被删除):
rundll32 printui.dll,PrintUIEntry /gd /c\\machine /n\\machine\printer
枚举每个机器打印机连接:
rundll32 printui.dll,PrintUIEntry /ge /c\\machine
使用 INF 添加打印机驱动程序:
rundll32 printui.dll,PrintUIEntry /ia /c\\machine /m "Brother DCP-128C" /h "x86" /v "Type 3 - User Mode" /f c:\infpath\infFile.inf
使用 INF 添加打印机驱动程序:
rundll32 printui.dll,PrintUIEntry /ia /K /c\\machine /m "Brother DCP-128C" /h "x86" /v 3
添加内置打印机驱动程序:
rundll32 printui.dll,PrintUIEntry /ia /c\\machine /m "Brother DCP-128C" /h "Intel" /v "Type 3 - Kernel Mode"
删除打印机驱动程序:
rundll32 printui.dll,PrintUIEntry /dd /c\\machine /m "Brother DCP-128C" /h "x86" /v "Type 3 - User Mode"
删除打印机驱动程序:
rundll32 printui.dll,PrintUIEntry /dd /K /c\\machine /m "Brother DCP-128C" /h "x86" /v 3
将打印机设置为默认打印机:
rundll32 printui.dll,PrintUIEntry /y /n "printer"
设置打印机注解:
rundll32 printui.dll,PrintUIEntry /Xs /n "printer" comment "My Cool Printer"
取得打印机设置:
rundll32 printui.dll,PrintUIEntry /Xg /n "printer"
取得文件中的打印机设置保存结果:
rundll32 printui.dll,PrintUIEntry /f "results.txt" /Xg /n "printer"
设置打印机设置命令使用:
rundll32 printui.dll,PrintUIEntry /Xs /n "printer" ?
将所有打印机设置存入一个文件:
rundll32 printui.dll,PrintUIEntry /Xs /n "printer" ?
从一个文件还原所有打印机设置:
rundll32 printui.dll,PrintUIEntry /Sr /n "printer" /a "file.dat"
将二级打印机信息存入一个文件:
rundll32 printui.dll,PrintUIEntry /Ss /n "printer" /a "file.dat" 2
从一个文件还原打印机安全描述符:
rundll32 printui.dll,PrintUIEntry /Sr /n "printer" /a "file.dat" s
从一个文件还原打印机全局 devmode 和打印机数据:
rundll32 printui.dll,PrintUIEntry /Sr /n "printer" /a "file.dat" g d
从文件最少设置还原并分析端口名:
rundll32 printui.dll,PrintUIEntry /Sr /n "printer" /a "file.dat" m p
启用打印机的客户端呈现:
rundll32 printui.dll,PrintUIEntry /Xs /n"printer" ClientSideRender enabled
禁用打印机的客户端呈现:
rundll32 printui.dll,PrintUIEntry /Xs /n"printer" ClientSideRender disabled