2011-08-24 43 views
14

我有下面的代碼工作:如何使用PowerShell位置對象就像在聲明

foreach ($db in $svr.Databases | 
     where-object { 
     $_.name -eq "testDB" 
     -or $_.name -eq "master" 
     -or $_.name -eq "model" 
     -or $_.name -eq "msdb" }) 
{ 
    write-output $db.name 
} 

是一個更清潔的方式做到這一點?

喜歡的東西:

foreach ($db in $svr.Databases | 
     where-object {$_.name -in "testDB, master, model, msdb" })  
{ 
    write-output $db.name 
} 

回答

19

使用-contains操作。如:

$dbs = "testDB", "master", "model", "msdb" 

foreach ($db in ($svr.Databases | where-object {$dbs -contains $_.name })) { 
    write-output $db.name 
} 

使用help about_Comparison_Operators瞭解有關此操作和其他比較運算符的更多信息。

更新:

的PowerShell v3中添加了-in操作。原始問題中的示例將在v3中運行。

+0

你是不是缺少一個括號呢? – Hill

+0

是的,我確實想念一個人。謝謝,修復。 – Rynant

+0

原始問題中的示例不太可行 - 因爲它是逗號分隔的字符串 - 不是數組。 –

7

您可以使用正則表達式:

$svr.Databases | where { $_.name -match 'testDB|master|model|msdb' } | foreach { $db.name }