Вы используете операнды оператора -notcontains
в неправильном порядке.Правильный синтаксис:
reference_array -notcontains item
В вашем случае:
$existingTables -notcontains $_
или
$existingTables -notcontains $_.Name
, если вы не расширяете свойство Name
.
Если вы хотите использовать массив ссылок в качестве второго операнда, вы должны использовать оператор -notin
:
$_ -notin $existingTables
Однако этот оператор недоступен до PowerShellv3.
В качестве альтернативы, вы можете добавить предложение исключить в ваш оператор SQL, как предложено в комментариях @ vonPryz .При этом старайтесь не открывать себя для SQL-инъекции .
Не делайте это:
$SQLQuery = @"
SELECT ...
FROM ...
WHERE name NOT IN (<strike>'$($existingTables[0])', '$($existingTables[1])', ...</strike>)
"@
Используйте подготовленный оператор (или «параметризованный запрос», как их называет Microsoft).Однако я не распознаю используемый вами командлет (кажется, что он не Invoke-Sqlcmd
), поэтому я не могу рассказать вам, как это сделать с помощью этого командлета.