2012-06-06 15 views
9

Aşağıdaki Powershell komut dosyasını çalıştırmaya çalışıyorum.LINQ's Select komutunun Powershell eşdeğeri?

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} 

sorunu $computers değil string[]-ComputerName gibi beklediği olmasıdır. Bu, adı verilen bir paramter ile ADComputer dizisidir.

# 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 
} 

Adlar için bir dizi dizge elde etmenin doğru yolu nedir? Ben C# olsaydı ben

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

olacağını biliyorum ama doğru PowerShell nasıl yapılacağını öğrenmek istiyorum.

cevap

12

Sen

Select-Object -ExpandProperty Name 

ya da (muhtemelen en yakın eşdeğeri) bir dizi olma sonucunu zorlamak için

ForEach-Object { $_.Name } 

Not kullanabilirsiniz (örneğin onun Count özelliğine erişmek istiyorsanız), ifadeyi @() ile çevrelemeniz gerekir. Aksi halde sonuç, tek bir nesne olan veya dizisidir.

+1

Teşekkürler! Kaybettiğim şey bu, bana cevap verdiğinde cevabı kabul edeceğim. –