Как использовать Powershell Where-Object как оператор IN

У меня есть следующий код, который работает:

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
}

Ответы

Ответ 1

Используйте оператор -contains. Как:

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

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

Используйте help about_Comparison_Operators, чтобы узнать больше об этом и других операторах сравнения.

Update:

В PowerShell v3 добавлен оператор -in. Пример в исходном вопросе будет работать в версии 3.

Ответ 2

Вы можете использовать регулярное выражение:

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