2012-06-06 4 views
9

Я пытаюсь запустить следующий сценарий Powershell.эквивалент Powershell команды Select 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} 

Этот вопрос $computers не string[] как -ComputerName ожидает. Это действительно массив из ADComputer с одним параметром, называемым именем.

# 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# Я знаю, что это было бы

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

, но я хочу, чтобы узнать, как сделать это в Powershell правильно.

ответ

12

Вы можете использовать

Select-Object -ExpandProperty Name 

или (вероятно, самый близкий эквивалент)

ForEach-Object { $_.Name } 

Обратите внимание, чтобы заставить результат быть массив (например, если вы хотите получить доступ к своей собственности Count), вы должны окружить выражение @(). В противном случае результатом может быть массив или один объект.

+1

Спасибо! Это то, чего я отсутствовал, я буду принимать ответ, как только это позволит мне. –

Смежные вопросы