删除数组中另一个数组中的项目

时间:2016-07-07 10:57:16

标签: powershell

我被我的剧本困住了。 我需要比较两个数组,一个是查询的结果,另一个是文件的内容:

$Array1 = Invoke-Sqlcmd -Query "select name from person"

$Array2 = Get-Content ".\Myfile.txt" #the file is a set of one item
every line

现在,在$ Array2中,有些项目我想从$ Array1中删除。

我该怎么做? 谢谢你的帮助!

2 个答案:

答案 0 :(得分:14)

使用Where-Object cmdlet根据$Array1中的内容过滤$Array2

$Array1 = $Array1 |Where-Object { $Array2 -notcontains $_ }

如果Invoke-Sqlcmd返回简单字符串,则有效。如果没有,你可以这样做:

$Array1 = $Array1 |Where-Object { $Array2 -notcontains $_.someProperty }

答案 1 :(得分:1)

如果性能是一个问题,你可以从一个数组构建交替的正则表达式,并将它作为一个数组运算符用于另一个数组,从而获得更快的结果。

$Array1 = Invoke-Sqlcmd -Query "select name from person"

$Array2 = Get-Content ".\Myfile.txt" #the file is a set of one item
every line

$regex = ‘(?i)^(‘ + (($Array2 |foreach {[regex]::escape($_)}) –join “|”) + ‘)$’

$Array1 -notmatch $regex

构建正则表达式here的代码说明。