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*”