web-dev-qa-db-ja.com

INステートメントのようなPowershellWhere-Objectの使用方法

私は動作する次のコードを持っています:

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
}
18
8kb

-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で機能します。

24
Rynant

正規表現を使用できます:

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

これを行うことができます(少なくともPSv5では):

$srv.Databases | where Name -in "testDB","master","model","msdb" | write-output { $_.Name }
1