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

PowerShell脚本删除IPP打印机:WMIC命令变量注入问题

解决通过PortName删除IPP打印机的问题

首先,你之前的代码问题出在WMIC的where条件语法和PowerShell变量解析的配合上,给你几个可行的方案:

方案1:修正WMIC命令的变量注入

用单引号把PortName的值括起来,同时确保PowerShell正确解析变量:

$printer = Get-Printer -Name copier
# 先把PortName存到单独变量,避免嵌套解析问题
$portName = $printer.PortName
# WMIC的where条件里,字符串值需要用单引号包裹
wmic printer where "PortName='$portName'" delete

如果一定要用like模糊匹配(其实你已经有精确值,没必要),得用子表达式确保PowerShell解析属性:

$printer = Get-Printer -Name copier
wmic printer where "PortName like '%$($printer.PortName)%'" delete

方案2:用PowerShell现代CIM命令替代WMIC

WMIC已经被微软弃用,推荐用更符合PowerShell习惯的CIM命令,避免引号坑:

$printer = Get-Printer -Name copier
# 通过PortName筛选打印机实例,然后删除
Get-CimInstance -ClassName Win32_Printer -Filter "PortName='$($printer.PortName)'" | Remove-CimInstance

为什么之前的代码失败?

  • WMIC的where子句中,字符串类型的条件必须用单引号包裹值,你之前没加单引号,导致WMIC无法识别合法的筛选条件
  • 嵌套双引号里的$printer.PortName,虽然PowerShell会解析,但结合WMIC的语法就会出错,用子表达式$($printer.PortName)或者单独存变量能避免这个问题

内容的提问来源于stack exchange,提问作者Wondering

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 19:15:59