2011-09-30 11 views
5

estoy tratando de hacer lo siguiente: resultado¿Cómo obtener una cadena en lugar de una matriz en PowerShell?

$files = Get-ChildItem c:\temp | Select-Object Name 
foreach ($i in $files) { 
    Write-Host "Filename is $i" 
} 

muestra:

Filename is @{Name=oracle10204.rsp} 
Filename is @{Name=powershell.txt} 

¿Cómo consigo únicamente el siguiente?

Filename is oracle10204.rsp 
Filename is powershell.txt 

Respuesta

4

Aquí está la respuesta para obtener solo el nombre de su ejemplo. Rodee el $ i con $() y haga referencia a la propiedad .Name. El $() hará que evalúe la expresión.

$files = Get-ChildItem c:\temp | Select-Object Name 
foreach ($i in $files) { 
    Write-Host "Filename is $($i.Name)" 
} 
5

No estoy seguro de por qué está utilizando Select-Object aquí, pero me acaba de hacer:

Get-ChildItem c:\temp | % {Write-Host "Filename is $($_.name)"} 

Este canaliza la salida de Get-ChildItem para un Foreach-Object (abreviatura %), que ejecuta el comando para cada objeto en la tubería.

$_ es la variable universal de objetos canalizados.

+0

Gracias, su ejemplo funciona, pero ¿cómo conseguir que mi declaración foreach brinde el resultado correcto? – jrara

+0

@jrara - Estoy diciendo que no use su declaración de foreach ya que esto es lo mismo pero de una manera mucho más eficiente. Pipelining es para lo que se diseñó powershell. – JNK

+0

Bueno, sí, pero estoy tratando de aprender PowerShell y me gustaría saber qué está mal con mi ciclo foreach. Sé que hay muchas otras maneras de hacer esto. – jrara

5

Con los -Nombre interruptor se puede obtener sólo nombres de objeto:

Get-ChildItem c:\temp -Name 
5

Si usted es inflexible sobre cómo obtener su original intento de trabajar, intente reemplazar

Select-Object Name 

con

Select-Object -ExpandProperty Name 
0

Puedes conseguir este objeto como una cadena con el parámetro Get-ChildItem -Name:

$variable = Get-ChildItem C:\temp -Name 

Esto le da una:

System.String
Si se utiliza el parámetro Nombre, Get-ChildItem devuelve los nombres de los objetos como cadenas.

Usted puede leer sobre él en Get-ChildItem.

Cuestiones relacionadas