我被我的剧本困住了。 我需要比较两个数组,一个是查询的结果,另一个是文件的内容:
$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中删除。
我该怎么做? 谢谢你的帮助!
答案 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的代码说明。