如何使用Powershell Where-Object就像一个IN语句

8kb*_*8kb 18 sql-server powershell smo

我有以下代码可行:

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
}
Run Code Online (Sandbox Code Playgroud)

这是一个更干净的方法吗?

就像是:

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

Ryn*_*ant 24

使用-contains运营商.喜欢:

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

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

使用help about_Comparison_Operators更多地了解这个和其他比较操作.

更新:

PowerShell v3添加了-in运算符.原始问题中的示例将在v3中使用.


Sha*_*evy 10

你可以使用正则表达式:

$svr.Databases | where { $_.name -match 'testDB|master|model|msdb' } | foreach { $db.name }
Run Code Online (Sandbox Code Playgroud)


And*_*ich 7

Powershell从 Powershell 3 开始就有一个-in运算符

$srv.Databases | where Name -in "master","model","msdb" | write-output { $_.Name }
Run Code Online (Sandbox Code Playgroud)

进一步阅读有关比较运算符的文档 > 包含运算符