admin管理员组文章数量:1547534
powershehll删除并重装打印机
- 01 前言
- 02 过程
- 1、打印机图标是灰的,底下状态栏——“打印机状态:脱机”
- 2、刚删除了打印机,过一会图标又冒出来,死活删不掉
- 3、添加新的打印机
- 03 后记
01 前言
故事发生在XXXX年XX月XX日
的某个办公室,小姐姐的本本连不上公司的打印机(局域网、无线,此处以ABC Printer
为例)了,要找人解决。怀揣着是时候表演真正的技术了
的想法开始一波王者操作
。期间碰到几个问题,记录一下。
02 过程
1、打印机图标是灰的,底下状态栏——“打印机状态:脱机”
- 首先当然是检查网络。由于网络打印机设置了固定IP(此处以
192.168.5.100
为例),而公司的网络又分了几个区段,如果网段不一致肯定连不上。结果:没问题
。 - 那么再看看防火墙。什么?防火墙设置操作不了?看来被优化了。怎么办呢?有办法:
Win+R
组合键调出“运行”,输入services.msc
,然后回车。稍等一会,弹出“服务”窗口,找到Windows Firewall
项,哦,原来是被禁用
了。右键
->属性
->启动类型
选为自动
,确定
,然后启动此服务。回过头看防火墙,两个都开启了,再看看允许程序或功能通过Windows防火墙
,找到文件和打印机共享
,都勾上再说,确定
保存。 - 打印机图标还是灰的,看来只能试试先删了,重新装一次。然而……
2、刚删除了打印机,过一会图标又冒出来,死活删不掉
- 查了一下资料,判断是由于该打印机还存在打印任务,所以删不干净。怎么办呢?有办法:
(1)停止打印服务。Win+R
组合键,输入cmd
,回车。在DOS窗口中输入net stop spooler
,回车。
(2)打开文件夹C:\Windows\System32\spool\PRINTERS\
,删除该目录下所有文件。
(3)开启打印服务。Win+R
组合键,输入cmd
,回车。在DOS窗口中输入net start spooler
,回车。
(4)再次删除打印机,彻底没了。结果:成功
。
3、添加新的打印机
添加打印机
,根据需要设置即可,问题不大。关键是这种操作看起来有些low
,不如换个口味——代码解决
!- 好了,请各位观众拿好板凳,备好瓜子,好戏要开锣了。下面表演的是,由
powershell
带来的一波蛇皮走位
,看好了。
<#
环境:powershell 5.1
其他环境未测试,有问题可回复
#>
Stop-Service -Name Spooler #停服务
Remove-Item $env:SystemRoot\System32\spool\PRINTERS\* | Out-Null #删文件
Start-Service -Name Spooler #开服务
$p = Get-WmiObject -Query "SELECT * FROM Win32_Printer";
$printerName = 'ABC Printer';
if($p){
$name = $($p|Where-Object{$_.DriverName -like $printerName }|Select-Object -First 1).name;
if($name){&rundll32 printui.dll,PrintUIEntry /dl /n $name }; #删除已有
$port = @();
$portAdress = "192.168.5.100";
$port += Get-WmiObject -Class Win32_TCPIPPrinterPort | Where-Object{$_.HostAddress -eq $portAdress};
if(-not $port){
#添加TCP/IP端口
&cscript $env:SystemRoot\System32\Printing_Admin_Scripts\zh-CN\prnport.vbs -a -r $portAdress -h $portAdress -o lpr -me -q BINARY_P1 -y public -i 1 | Out-Null;
}else{
$portAdress = $port[0].Properties["name"].value
}
sleep -Seconds 1 #可暂停一秒
#添加新的打印机
&rundll32 printui.dll,PrintUIEntry /if /b $printerName /r $portAdress /m $printerName
}
以上代码另存为.ps1
文件,右键
,使用Powershell 运行
(如果不能执行,参考 让系统可以执行.ps1文件)。
当然,还有一种使用姿势是cmd+Powershell 混搭
,在cmd
中运行以下:
powershell.exe -command "Stop-Service -Name Spooler;Remove-Item $env:SystemRoot\System32\spool\PRINTERS\* | Out-Null;Start-Service -Name Spooler;$p = Get-WmiObject -Query 'SELECT * FROM Win32_Printer';$printerName = 'ABC Printer';if($p){$name = $($p|Where-Object{$_.DriverName -like $printerName}|Select-Object -First 1).name;if($name){&rundll32 printui.dll,PrintUIEntry /dl /n $name };$port = @();$portAdress = '192.168.5.100';$port += Get-WmiObject -Class Win32_TCPIPPrinterPort|Where-Object{$_.HostAddress -eq $portAdress};if(-not $port){&cscript $env:SystemRoot\System32\Printing_Admin_Scripts\zh-CN\prnport.vbs -a -r $portAdress -h $portAdress -o lpr -me -q BINARY_P1 -y public -i 1 | Out-Null}else{$portAdress = $port[0].Properties['name'].value};sleep -Seconds 3;&rundll32 printui.dll,PrintUIEntry /if /b $printerName /r $portAdress /m $printerName}"
此脚本适用于
已经装过此打印机,只是偶尔抽风不能用
的情况(本机已经存在该打印机的驱动)。如果之前没有装过,需另外修改,指定驱动文件,此处不做讨论,请另寻别处。
03 后记
经过一波操作,小姐姐的本本满血复活,心情大好,约了下班一起吃饭,要不要答应人家呢~(想得美,哈哈哈)
参考资料:
windows批处理一键安装网络打印机脚本
本文标签: 重装打印机powershehll
版权声明:本文标题:powershehll删除并重装打印机 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/dianzi/1727197481a1101819.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论