2011-08-24 26 views
14

Tôi có đoạn mã sau đó hoạt động:Làm thế nào để sử dụng Powershell đâu-Object như một tuyên bố TRÊN

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 
} 

phải là một cách sạch hơn để làm điều này?

Cái gì như:

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

Trả lời

19

Sử dụng các nhà điều hành -contains. Giống như:

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

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

Sử dụng help about_Comparison_Operators để tìm hiểu thêm về điều này và các toán tử so sánh khác.

Cập nhật:

PowerShell v3 đã thêm các nhà điều hành -in. Ví dụ trong câu hỏi ban đầu sẽ làm việc trong v3.

+0

đang không thiếu một dấu ngoặc đó? – Hill

+0

Vâng, tôi đã bỏ lỡ một paren. Cảm ơn, cố định. – Rynant

+0

Ví dụ trong câu hỏi ban đầu sẽ không hoàn toàn hoạt động - vì nó là một chuỗi được phân tách bằng dấu phẩy - không phải là một mảng. –

7

Bạn có thể sử dụng một regex: bạn

$svr.Databases | where { $_.name -match 'testDB|master|model|msdb' } | foreach { $db.name } 
Các vấn đề liên quan