我正在尝试做一些相当简单的事情 - 我有一个包含多个元素的字符串数组。我想用不包含某个子字符串的元素创建另一个字符串数组。
不幸的是同时使用-notlike
和-notcontains
,我的$l
不会返回任何条目。我希望它能返回一个带有“two”的条目。我怀疑我做了一些简单的错误,但我无法弄明白。
$s = "one","two"
Write-Host "s:"
Write-Host "$s"
我尝试了-notlike和-notcontains,并且都将$ l返回为空。我不是同时使用两者。
#$l = Where-Object ($s -notlike "on")
$l = Where-Object ($s -notcontains "on")
Write-Host "l:"
Write-Host "$l"
同样,我希望$ l返回一个元素“two”,因为“on”匹配“one”。
答案 0 :(得分:4)
-NotLike
可以使用,但你需要在Where-Object
(你当前使用括号)的表达式周围使用花括号,你需要使用*
作为通配符
在Where-Object
中,您还需要使用$_
作为变量。这是一个特殊的自动变量,表示正在处理的管道中的当前项目(例如,“one”,然后是“two”):
$s = "one","two"
"s: $s"
$l = $s | Where-Object { $_ -notlike "on*"}
"l: $l"
答案 1 :(得分:3)
@Mark Wragg的评论和答案是关于-notlike
运算符所需的通配符语法的。
除此之外,Where-Object
子句根本不是必需的,因为比较运算符在用于数组时也将作为过滤器运行:
$s = "one","two"
"s: $s"
$l = $s -notlike "on*"
"l: $l"