Сравнить массив в Powershell - PullRequest
0 голосов
/ 12 октября 2011

Вопрос, я хотел бы иметь возможность сравнивать список объектов с массивом строк. Более или менее, как при использовании оператора Sql 'IN' (где TableName IN ('Table1', 'Table2', 'Table3').

В частности, я использую список таблиц SMO и хотел бы возвращать только таблицы по именам, которые содержатся в массиве имен таблиц.

Например: $ tablelist = @ ("Адрес", "Телефон", "Электронная почта")

sl "SQLSERVER: SQL \ SERVERNAME \ DEFAULT \ DATABASES \ DATABASEName \ TABLES"

$ таблиц = gci | где {$ _. Name -> wtf мне делать здесь с $ tablelist, если это возможно?}

ТИА! B

Ответы [ 3 ]

0 голосов
/ 12 октября 2011

Обновление:

Похоже, -in добавлено в v3.0. Предполагается, что это было там все время!

Так что в v2.0 вы должны использовать -contains или -eq:

$tables = gci | where { $tablelist -contains  $_.Name}

или

$tables = gci | where { $tablelist -eq $_.Name}

Вы можете использовать несколько операторов:

$a = 1,2,3

1 -in $a  #True
4 -in $a  #False

$a -contains 1  #True
$a -contains 4  #True

$a -eq 1  #gives 1
$a -eq 4  #returns nothing

Оператор -in похож на тот, к которому вы привыкли в SQL. При использовании с массивом -eq видит, присутствует ли элемент в массиве, и возвращает элемент, если это так. Таким образом, вы можете использовать его как if($a -eq 1)

Так что в вашем случае вы можете сделать что-то вроде:

$tables = gci | where {$_.Name -in $tablelist }
0 голосов
/ 07 декабря 2011

Скотт, Похоже, что вы хотите сделать это с помощью -Contains.

Вот краткий пример использования SQLPSX

Import-Module SQLServer;
$TableList= 'AWBuildVersion', 'bigProduct', 'bigTransactionHistory', 'DatabaseLog'
Get-SqlDatabase -sqlserver localhost\R2 -dbname AdventureWorks |
Get-SqlTable |
where {$TableList -contains $_.name}|
select name, DataSpaceUsed
0 голосов
/ 12 октября 2011
$tables = gci | where{$tablist -contains $_.name}

Оператор сравнения -contains - ваш лучший выбор для этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...