You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

请求协助编写PowerShell脚本删除已存在的共享打印机

请求协助编写PowerShell脚本删除已存在的共享打印机

嘿,我来帮你梳理下这个PowerShell脚本的问题!你的思路方向是对的,但脚本里有几个小细节需要调整,咱们来一步步修正:

首先说说你原脚本里的问题:

  • 在ForEach-Object循环里,你用了整个$printers集合变量,而不是当前遍历到的单个打印机对象,这会导致Remove-Printer收到一堆名称参数,大概率执行失败。
  • 那个if ($printers)的判断其实没必要,如果$printers是空集合,循环根本不会触发,完全可以去掉。

下面是修正后的完整脚本,我还加了一些实用的细节:

# 获取所有网络共享打印机(即\\server\printer这类连接型打印机)
$printers = Get-Printer | Where-Object { $_.Type -eq 'Connection' } | Select-Object -ExpandProperty Name

# 遍历每个打印机并删除,跳过确认提示
$printers | ForEach-Object {
    Remove-Printer -Name $_ -Confirm:$false
    Write-Host "已删除打印机: $_"
}

几点说明:

  • 我加了-ExpandProperty Name,这样$printers直接存储的是纯打印机名称字符串,而非带属性的对象,后续处理更简洁。
  • 循环里用$_指代当前正在处理的打印机,确保每次只操作一个设备,避免批量参数错误。
  • 新增的Write-Host可以让你直观看到哪些打印机被成功删除,方便验证执行结果。

如果需要处理可能的错误(比如打印机正在被占用、权限不足),可以加上错误捕获逻辑,让脚本更健壮:

$printers = Get-Printer | Where-Object { $_.Type -eq 'Connection' } | Select-Object -ExpandProperty Name

$printers | ForEach-Object {
    try {
        Remove-Printer -Name $_ -Confirm:$false -ErrorAction Stop
        Write-Host "✅ 成功删除打印机: $_"
    }
    catch {
        Write-Host "❌ 删除打印机 $_ 失败: $($_.Exception.Message)"
    }
}

⚠️ 注意:运行这个脚本需要管理员权限,否则可能会因为权限不足无法完成删除操作。

备注:内容来源于stack exchange,提问作者RobertDL

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.21 13:30:29