比较Powershell中的数组

时间:2011-10-12 14:44:54

标签: powershell

问题,我希望能够将一个对象列表与一个字符串数组进行比较。或多或少,比如使用Sql'IN'运算符(TableName IN('Table1','Table2','Table3')。

具体来说,我正在使用SMO表列表,我想只返回表名数组中包含的表。

例如: $ tablelist = @(“地址”,“电话”,“电子邮件”)

sl“SQLSERVER:SQL \ SERVERNAME \ DEFAULT \ DATABASES \ DATABASEName \ TABLES”

$ tables = gci |其中{$ _。姓名 - > wtf我在这里使用$ tablelist,如果可能的话?}

TIA! 乙

3 个答案:

答案 0 :(得分:0)

$tables = gci | where{$tablist -contains $_.name}

我认为-contains比较运算符是您的最佳选择。

答案 1 :(得分:0)

<强>更新

在v3.0中添加了类似-in的内容。假设一直都在那里!

因此,在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 }

答案 2 :(得分:0)

斯科特 这听起来像你想要的方式是使用-Co​​ntains。

以下是使用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