2011-08-24 15 views
14

gibi Powershell Nerede-Object kullanmak Ben çalışır aşağıdaki kod:Nasıl bir IN deyimi

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 
} 

Bunu yapmak için temizleyici bir yolu var mı? gibi

şey:

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

cevap

19

kullanın -contains operatörü. Gibi:

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

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

kullanın help about_Comparison_Operators bu ve diğer karşılaştırma operatörleri hakkında daha fazla bilgi edinmek.

Güncelleme:

PowerShell v3 -in operatörü eklemiştir. Orijinal sorudaki örnek v3'te çalışacaktır. Orada bir parantez eksik değil

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

Are: Bir normal ifadeler kullanabilirsiniz – Hill

+0

Evet, bir paren özledim. Teşekkürler, düzeltildi. – Rynant

+0

Özgün sorudaki örnek, bir dizi değil, virgülle ayrılmış bir dize olduğu için tam olarak çalışmayacaktır. –

7

?