I\'m stuck with my script. I need to compare two arrays, one is the result of a query, the other one of a content of a file:
$Array1 = Invoke-Sqlcmd -Query
If performance is an issue, you can get faster results constructing an alternating regex from one of the arrays, and using it as an array operator against the other.
$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
Explanation of the code to build the regex here.
Use the Where-Object cmdlet to filter $Array1
based on what is in $Array2
:
$Array1 = $Array1 |Where-Object { $Array2 -notcontains $_ }
That works if Invoke-Sqlcmd
returns simple strings. If not, you could do something like:
$Array1 = $Array1 |Where-Object { $Array2 -notcontains $_.someProperty }