PowerShell where对象

PowerShell where对象,powershell,Powershell,我正在尝试做一些相当简单的事情——我有一个包含多个元素的字符串数组。我想用不包含特定子字符串的元素创建另一个字符串数组 不幸的是,同时使用-notlike和-notcontains,my$l不会返回任何条目。我希望它返回一个带有“2”的条目。我怀疑我做错了什么,但我一直没能弄明白 $s = "one","two" Write-Host "s:" Write-Host "$s" 我尝试了-notlike和-notcontains,都返回了空的$l。我不会同时使用这两种方法 #$l = Whe

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

不幸的是,同时使用
-notlike
-notcontains
,my
$l
不会返回任何条目。我希望它返回一个带有“2”的条目。我怀疑我做错了什么,但我一直没能弄明白

$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返回一个元素“2”,因为“on”与“1”匹配。

-NotLike
将起作用,但您需要在
Where Object
中的表达式周围使用大括号(您当前正在使用括号),并且需要使用
*
作为通配符

Where Object
中,还需要使用
$\uu
作为变量。这是一个特殊的自动变量,表示正在处理的管道中的当前项(例如,“一”,然后是“二”):


-NotLike
可以工作,但是您需要在
Where对象中的表达式周围使用大括号(您当前使用的是括号),并且需要使用
*
作为通配符

Where Object
中,还需要使用
$\uu
作为变量。这是一个特殊的自动变量,表示正在处理的管道中的当前项(例如,“一”,然后是“二”):


@Mark Wragg的评论和回答与
-notlike
运算符所需的通配符语法有关

除此之外,根本不需要
Where Object
子句,因为在对数组使用比较运算符时,比较运算符也将用作过滤器:

$s = "one","two"
"s: $s"

$l = $s -notlike "on*"
"l: $l"

@Mark Wragg的评论和回答与
-notlike
运算符所需的通配符语法有关

除此之外,根本不需要
Where Object
子句,因为在对数组使用比较运算符时,比较运算符也将用作过滤器:

$s = "one","two"
"s: $s"

$l = $s -notlike "on*"
"l: $l"

我认为数组应该这样声明:
$s=@('one','two')
。接下来,试着在双引号内加一个星号:
$l=Where对象($s-notcontains“*on*”)
。我不确定这是否真的有效,但你可以试试:)Mark Wragg给出了一个很好的答案我认为数组应该这样声明:
$s=@(“一”,“二”)
。接下来,试着在双引号内加一个星号:
$l=Where对象($s-notcontains“*on*”)
。我不确定这是否真的有效,但你可以试试:)Mark Wragg给出了一个很好的答案我确实试过了,但结果不是真的/假的吗?啊,不,我没有试过-不喜欢,我试过-不包含。很好的答案,有一个向上投票:)。如果对标量(单个项目)使用,它可以作为一个测试(返回true/false)。当用作数组运算符时,它起到过滤器的作用。如果您的输入有可能从数组变为单个项,那么这将成为一种危险的解决方案。我想你可以通过做
$l=@($s)来解决这个问题,而不是像“on*”
那样,可能会产生意想不到的后果。您可以通过显式地强制左侧成为数组来缓解这种情况,例如$l=@($s)-notlike“on*”我确实尝试过,但它不会导致真/假结果吗?啊,不,我没有尝试使用-notlike,我尝试使用-notcontains。很好的答案,有一个向上投票:)。如果对标量(单个项目)使用,它可以作为一个测试(返回true/false)。当用作数组运算符时,它起到过滤器的作用。如果您的输入有可能从数组变为单个项,那么这将成为一种危险的解决方案。我想你可以通过做
$l=@($s)来解决这个问题,而不是像“on*”
那样,可能会产生意想不到的后果。您可以通过显式地强制左侧为数组来缓解这种情况,例如$l=@($s)-notlike“on*”