PowerShell所在的对象

时间:2017-09-29 12:50:25

标签: powershell

我正在尝试做一些相当简单的事情 - 我有一个包含多个元素的字符串数组。我想用不包含某个子字符串的元素创建另一个字符串数组。

不幸的是同时使用-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”。

2 个答案:

答案 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"