2012-06-06 37 views
9

Tôi đang cố gắng chạy tập lệnh Powershell sau.Powershell tương đương với lệnh Chọn LINQ?

import-module ActiveDirectory 

$computers = Get-ADComputer -filter * -SearchBase "OU=myOU,DC=vw,DC=local" | select-object name 

Invoke-Command -ComputerName $computers -ScriptBlock {gpupdate /target:Computer} 

Vấn đề là $computers không phải là một string[] như -ComputerName hy vọng. Nó thực sự là một mảng của ADComputer với một tên gọi là paramter.

# Get-ADComputer -filter * -SearchBase "OU=myOU,DC=vw,DC=local" | select-object name | Format-Custom 

class ADComputer 
{ 
    name = PC1 
} 

class ADComputer 
{ 
    name = PC2 
} 

class ADComputer 
{ 
    name = PC3 
} 

Cách chính xác để nhận được một chuỗi các chuỗi cho tên? Nếu tôi ở C# tôi biết nó sẽ là

string[] computerNames = computers.Select(computer => computer.name).ToArray(); 

nhưng tôi muốn tìm hiểu cách thực hiện nó trong Powershell chính xác.

Trả lời

12

Bạn có thể sử dụng

Select-Object -ExpandProperty Name 

hay (có lẽ là tương đương gần nhất)

ForEach-Object { $_.Name } 

Lưu ý rằng để buộc kết quả là một mảng (ví dụ nếu bạn muốn truy cập vào bất động sản Count của nó), bạn nên bao quanh biểu thức với @(). Nếu không, kết quả có thể là một mảng hoặc một đối tượng duy nhất.

+1

Cảm ơn! Đó là những gì tôi đã mất tích, tôi sẽ chấp nhận câu trả lời khi nó cho phép tôi. –

Các vấn đề liên quan