求助:编写PowerShell脚本删除状态为‘未连接’的Brother PocketJet打印机副本
求助:编写PowerShell脚本删除状态为‘未连接’的Brother PocketJet打印机副本
嗨,我太懂你这种明明系统里看得见一堆打印机副本,却用常规命令抓不到的憋屈了!之前的WMIC和WMI命令失效,大概率是因为当打印机断开连接后,这类命令会过滤掉状态异常的设备,导致你找不到那些残留的副本。
给你两个可行的解决方案,你可以根据情况试试:
方案一:用CIM查询并删除(优先尝试)
WMI的替代方案CIM对状态异常的设备支持更好,你可以用下面的脚本,精准定位未连接的Brother副本并删除:
# 筛选出名称匹配且状态为未连接的Brother打印机 $disconnectedPrinters = Get-CimInstance Win32_Printer | Where-Object { $_.Name -like 'Brother PJ-723 (Copy*' -and $_.PrinterStatus -eq 7 # 7代表打印机处于未连接/离线状态 } # 确认要删除的设备 if ($disconnectedPrinters) { Write-Host "找到以下未连接的打印机副本,即将删除:" $disconnectedPrinters | Select-Object -ExpandProperty Name $disconnectedPrinters | ForEach-Object { $_.Delete() } Write-Host "删除完成!" } else { Write-Host "未找到符合条件的未连接打印机副本。" }
方案二:直接清理注册表残留(需管理员权限)
如果上面的命令还是抓不到,那这些副本大概率是系统里的注册表残留了。操作注册表需要管理员权限,步骤如下:
- 以管理员身份打开PowerShell
- 运行以下脚本:
# 打印机注册表存储路径 $printerRegPath = "HKLM:\SYSTEM\CurrentControlSet\Control\Print\Printers" # 筛选出Brother的副本条目 $brotherCopies = Get-ChildItem -Path $printerRegPath | Where-Object { $_.PSChildName -like 'Brother PJ-723 (Copy*' } # 确认要删除的条目 if ($brotherCopies) { Write-Host "即将删除以下注册表中的打印机副本:" $brotherCopies | Select-Object -ExpandProperty PSChildName # 删除条目并重启打印服务 $brotherCopies | Remove-Item -Recurse -Force -Confirm:$false Restart-Service -Name Spooler -Force Write-Host "删除完成,已重启打印服务生效。" } else { Write-Host "未找到符合条件的打印机注册表条目。" }
注意事项
- 操作注册表前建议先备份对应路径的注册表项,避免误删导致其他问题
- 两种方案都建议先单独运行查询部分(删除前的代码),确认要删除的是目标打印机,再执行删除操作
备注:内容来源于stack exchange,提问作者Bean




