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
相关产品推荐
相关产品推荐

