You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

求助:编写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 "未找到符合条件的未连接打印机副本。"
}

方案二:直接清理注册表残留(需管理员权限)

如果上面的命令还是抓不到,那这些副本大概率是系统里的注册表残留了。操作注册表需要管理员权限,步骤如下:

  1. 以管理员身份打开PowerShell
  2. 运行以下脚本:
# 打印机注册表存储路径
$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

火山引擎 最新活动