2011-08-24 16 views
14

のようにPowerShellのどこ-オブジェクトを使用するI持って働き、次のコード:方法に声明

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

はい、私はparenが欠けていました。ありがとう、固定。 – Rynant

+0

元の質問の例は、配列ではなくカンマで区切られた文字列なので、うまくいきません。 –

7

あなたは正規表現を使用することができます。

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