问题,我希望能够将一个对象列表与一个字符串数组进行比较。或多或少,比如使用Sql'IN'运算符(TableName IN('Table1','Table2','Table3')。
具体来说,我正在使用SMO表列表,我想只返回表名数组中包含的表。
例如: $ tablelist = @(“地址”,“电话”,“电子邮件”)
sl“SQLSERVER:SQL \ SERVERNAME \ DEFAULT \ DATABASES \ DATABASEName \ TABLES”
$ tables = gci |其中{$ _。姓名 - > wtf我在这里使用$ tablelist,如果可能的话?}
TIA! 乙
答案 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)
斯科特 这听起来像你想要的方式是使用-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