2012-06-06 10 views
9

Estoy tratando de ejecutar el siguiente script de Powershell.equivalente Powershell del comando Select de 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} 

La cuestión es $computers no es un string[] como -ComputerName Espera. Realmente es una matriz de ADComputer con un nombre llamado nombre.

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

¿Cuál es la forma correcta de obtener una serie de cadenas para los nombres? Si estuviera en C# Yo sé que sería

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

pero quiero aprender a hacerlo en Powershell correctamente.

Respuesta

12

Puede utilizar

Select-Object -ExpandProperty Name 

o (probablemente el equivalente más cercano)

ForEach-Object { $_.Name } 

Tenga en cuenta que para obligar a que el resultado sea una matriz (por ejemplo, si desea acceder a su propiedad Count), debe rodear la expresión con @(). De lo contrario, el resultado podría ser una matriz o un único objeto.

+1

Gracias! Eso es lo que me faltaba, aceptaré la respuesta una vez que me lo permita. –

Cuestiones relacionadas