2011-10-12 137 views
0

問題,我希望能夠比較對象列表和字符串數組。或多或少,就像使用Sql'IN'操作符(其中TableName IN('Table1','Table2','Table3')。比較Powershell中的數組

具體來說,我使用SMO表列表,我想通過包含表名的數組內的名稱只返回表

例如: $ tablelist = @(「地址」,「電話」,「電子郵件」)

SL「SQLSERVER: SQL \ SERVERNAME \ DEFAULT \ DATABASES \ DATABASENAME \ TABLES「

$ tables = gci |其中{$ _。名稱 - > wtf是否可以在$ tablelist中執行,如果可以的話}

TIA! 乙

回答

0

更新:

好像-in在3.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

是在豪華2.0比較運算符-in可用一個簡單的例子??爲什麼我能找到它? –

+0

@Christian - 我只是意識到它只存在於V3.0!我以爲它一直在那裏。對於那個很抱歉。 – manojlds

+0

關閉,但不完全。 $ tablelist也是一個數組。我喜歡-in功能,看起來正是我在尋找的東西,但我懷疑我正在嘗試做什麼(將數組與數組進行比較並僅返回具有相同名稱的對象)可能必須使用自定義過濾器來完成。我只是好奇這個功能是否已經存在,但我只是沒有看到它。這是我多次需要的功能。感謝您的建議/幫助傢伙!-B- –

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

-contains比較操作是爲了這個,我想你最好的選擇。

0

斯科特, 這聽起來像你想要去了解這個方法是使用 - 包含。

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