PowerShell 如何删除数组中包含指定关键词的对应元素
原有代码存在的问题
你写的代码无法得到预期结果,原因如下:
- 你的
$Printers数组存储的是纯字符串,不是带name属性的自定义对象,调用$_.name无法拿到当前元素的值 - PowerShell的
-contains是精确匹配整个元素的运算符,无法判断字符串中是否包含指定子串 - 逻辑写反:你需要过滤掉匹配关键词的条目,现有代码是保留匹配的条目
- 不需要写
-Filter *,数组可以直接传入管道
最简实现方式
如果要排除的关键词固定,直接用正则匹配的写法一行就能实现:
$filteredPrinters = $Printers | Where-Object { $_ -notmatch 'Phone|XML' }
运行后$filteredPrinters里就会只剩下Printer Building1、Printer Station这类不包含指定关键词的元素,完全符合你的需求。
关键词为动态数组时的写法
如果后续需要频繁修改要排除的关键词,可以把关键词存在数组里维护,写法如下:
$excludeKeywords = @('Phone', 'XML') $filteredPrinters = $Printers | Where-Object { $currentStr = $_ # 只要有一个关键词匹配就排除当前元素 -not ($excludeKeywords | Where-Object { $currentStr.Contains($_) }) }
内容的提问来源于stack exchange,提问作者pyte
相关产品推荐
相关产品推荐

