局域网打印机批量安装驱动

背景:

公司内部办公使用多台打印机,不同品牌不同型号,有网络打印机,有共享式的打印机,员工电脑系统也有XP、和win7,还有win10系统,还分32位和64位,所有每次给新电脑或者重装后的电脑安装打印机驱动都比较花时间去找驱动和安装。一直就想写个适用于公司内部使用的打印机驱动一键安装的功能,于是就是有了下文。

第一种是共享式的打印机:

  • 先连接目标电脑,假如目标电脑访问需要密码,请自行更改

    net use \\XXX.XXX.XX.XX\IPC$ "密码" /user:"guest"

  • 安装驱动,某些打印机系统自带驱动,但是被精简过的系统等多种原因可能导致系统自带的驱动不存在,所以我们还是自己找合适的驱动放到目录下面

    rundll32 printui.dll,PrintUIEntry /ia  /f "C:\Documents and Settings\Administrator\桌面\p\L310_WINX86_222\L310_WINX86_222\E_JF1N4E.INF" /m "EPSON L310 Series"

  • 连接共享打印机

    rundll32 printui.dll,PrintUIEntry /in /u /z /q /n "\\XX.XX.XX.XX\打印机名" 

第二种是网络打印机:

  • 删除重名的打印机,否则会出现打印机副本

    rundll32 printui.dll,PrintUIEntry /dl /n "打印机名" /q

  • 利用系统自带脚本 Prnport.vbs 创建打印机 TCP/IP 端口

    cscript "C:\Documents and Settings\Administrator\桌面\p\prnport.vbs" -a -r IP_192.168.1.28 -h 192.168.1.28 -o raw

  • 连接打印机并安装驱动

    rundll32 printui.dll,PrintUIEntry /u /if /b "自定义打印机名" /f "打印机驱.INF,填写全路径" /r "刚才创建的打印机端口" /m "INF文件内找对应的打印机型号" /z

终篇:

以上就是批量安装的关键命令,可以写成 bat ,或者做成小程序批量安装。我用 aardio 实现了这个小功能:

截图:(按照我的规则放驱动和填写配置信息就能用)

《局域网打印机批量安装驱动》

BAT脚本参考:——网络打印机篇

@echo off
rem "rem"是注释,"@echo off"是不显示命令提示符"C:\Users\admin>"
echo;欢迎使用打印机安装程序
echo;按任意键开始安装,或按右上角 X 退出安装
pause>nul
rem ">nul"使命令输出不显示
echo;创建打印机 TCP/IP 端口: IP_172.16.10.251
cscript %~dp0\m126drivers\prnport.vbs -a -r IP_172.16.10.251 -h 172.16.10.251 -o raw
rem "%~dp0"是脚本所在目录,这里有个坑,官方例子里没有 -o raw 这个参数,但是没有这个参数会报参数无效
rem "prnport.vbs"实际目录是 C:\Windows\System32\Printing_Admin_Scripts\zh-CN ,此处复制到驱动目录
echo;删除同名打印机
rundll32 printui.dll,PrintUIEntry /dl /n "HP LaserJet Pro MFP M126nw" /q
rem 此处删除同名打印机,否则会出现打印机副本
echo;创建打印机: HP LaserJet Pro MFP M126nw
rundll32 printui.dll,PrintUIEntry /if /b "HP LaserJet Pro MFP M126nw" /f %~dp0\m126drivers\hpcm125126.inf /r "IP_172.16.10.251" /m "HP LaserJet Pro MFP M125-M126 PCLmS" /z
rem 此处注意 /m 后面的参数为 inf 文件里面的设备名称,/b 后面的为自定义打印机名称,此处也可以使用 vbs 脚本安装,脚本目录同上
echo;打印机安装完成
echo;按任意键退出...
pause>nul

BAT脚本参考:——共享印机篇

@echo off
rem "rem"是注释,"@echo off"是不显示命令提示符"C:\Users\admin>"
echo;欢迎使用打印机自动安装程序
echo;
set ip=192.168.1.86
set model=HP LaserJet 1022
set port=\\192.168.1.86\HP LaserJet 1022
rem ">nul"使命令输出不显示
echo;正在连接IPC匿名通道...%ip%
net use \\%ip%\IPC$ "" /user:"guest"
echo;正在 %~n0
if "%PROCESSOR_ARCHITECTURE%"=="x86" goto x86
if "%PROCESSOR_ARCHITECTURE%"=="AMD64" goto x64
exit
:x64
rundll32 printui.dll,PrintUIEntry /ia /f "%~dp0\hp L 1022\64\HPLJ1020.INF"  /m "%model%"
goto exit
:x86
rundll32 printui.dll,PrintUIEntry /ia /f "%~dp0\hp L 1022\32\HPLJ1020.INF"  /m "%model%"
goto exit
:exit
rundll32 printui.dll,PrintUIEntry /in /u /z /q /n "%port%" 
echo;
echo;打印机安装完成
echo;按任意键退出...
pause>nul

aardio代码:

import win.ui;
/*DSG{{*/
mainForm = win.form(text="#铭,打印机驱动安装";right=681;bottom=280)
mainForm.add(
button={cls="button";text="安装驱动";left=176;top=5;right=275;bottom=275;font=LOGFONT(weight=700);z=2};
checklist={cls="checklist";left=9;top=6;right=173;bottom=275;edge=1;items={};msel=1;z=1};
edit={cls="edit";left=278;top=8;right=675;bottom=275;edge=1;hscroll=1;multiline=1;vscroll=1;z=3}
)
/*}}*/
import fsys.ini
import process.popen
ini = fsys.ini("data.ini")
var is64 = process().isWow64()
var tmp = ini.getSectionNames()
var tab = {}  //打印机列表
for(k,v in tmp){
var tt = ini.readKeys(v)
var gg = {}
for(k,v1 in tt){
gg[v1] = ini.read( v, v1 ):""
}
tab[gg.name] = gg
mainForm.checklist.addItem(gg.name)
}
var p1 = //rundll32 printui.dll,PrintUIEntry /dl /n "%s" /q
var p2 = //cscript  "%s" -a -r IP_%s -h %s -o raw
var p3 = //rundll32 printui.dll,PrintUIEntry /u  /if /b "%s" /f "%s" /r "IP_%s" /m "%s" /z 
var s1 = //net use \\%s\IPC$ "%s" /user:"%s"
var s2 = //rundll32 printui.dll,PrintUIEntry /ia  /f "%s" /m "%s"
var s3 = //rundll32 printui.dll,PrintUIEntry /in /u /z /q /n "%s" 
mainForm.button.oncommand = function(id,event){
var its = {}
for(i=1;mainForm.checklist.count;1){
if(mainForm.checklist.getChecked(i)) table.push(its, mainForm.checklist.getItemText(i))
}
mainForm.edit.clear()
mainForm.button.disabled = true
//打开命令行,隐藏命令行窗口
prcs = process.popen("cmd.exe")
for(k,v in its){
var params = tab[v]
if(!#params.port){
return ; 
}
mainForm.edit.appendText(string.format("正在安装:--= %s =--,请稍后....",v )++'\r\n')
if(string.startWith(params.port,"\\")){  //共享打印机
//连接$IPC
mainForm.edit.appendText( string.format('正在连接:%s $IPC 通道...\r\n', params.name))
prcs.write(string.format(s1, params.port, params.password, params.user,)++'\n')
result = prcs.peekTo(">");
//安装驱动
mainForm.edit.appendText('正在安装驱动...\r\n')
prcs.write(string.format(s2, is64 ? io.fullpath(params.inf64) : io.fullpath(params.inf32), params.model)++'\n')
result = prcs.peekTo(">");
//连接打印机
mainForm.edit.appendText('正在连接共享打印机...\r\n')
prcs.write(string.format(s3, params.port)++'\n')
result = prcs.peekTo(">");
mainForm.edit.appendText('安装完成!\r\n\r\n\r\n')
}else {  //网络打印机
//删除重名的打印机,避免出现打印机副本
mainForm.edit.appendText('正在删除重名的打印机,避免出现打印机副本...\r\n')
prcs.write(string.format(p1, params.name)++'\n')
result = prcs.peekTo(">");
//创建端口
mainForm.edit.appendText('正在创建打印机TCP端口...\r\n')
prcs.write(string.format(p2, io.fullpath("prnport.vbs"), params.port, params.port)++'\n')
result = prcs.peekTo(">");
//安装打印机
mainForm.edit.appendText('正在安装驱动...\r\n')
prcs.write(string.format(p3, params.name, is64 ? io.fullpath(params.inf64) : io.fullpath(params.inf32),params.port,params.model)++'\n')
result = prcs.peekTo(">");
mainForm.edit.appendText('安装完成!\r\n\r\n\r\n')
}
}
prcs.write('exit\n')
prcs.close()
mainForm.button.disabled = false
}
mainForm.show();
win.loopMessage();

点赞

发表评论

电子邮件地址不会被公开。 必填项已用*标注