Как использовать 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 }