2011-02-01 26 views
43

Importación de un archivo CSV con powershell.Powershell: hace referencia a una propiedad que contiene un espacio

El problema es que el título de una de las columnas es "Tiempo restante - Horas". Así que estoy obteniendo una secuencia de objetos, y en realidad se le ha asignado la propiedad "Tiempo restante - Horas".

¿Cuál es la sintaxis para referirse a esta propiedad?

por ejemplo

Import-Csv AllOpenCases.csv | % {$case = $_ } 
$case | get-member 

vuelve

Category    : Inquiry 
Starred    : No 
Remaining Time - Hours : 22.5 

pero si escribo

$case.Remaining Time - Hours 

que recibo "símbolo inesperado 'Time' en la expresión o declaración"

+4

@Kannabiran - una serie de puntos: 1) la política en StackOverflow es que si una pregunta no se responde en este sitio, entonces se le puede pedir, como stackoverflow es a menudo el primer puerto de escala para los desarrolladores. 2) Publiqué esta pregunta hace más de tres años, tiempo durante el cual se recibieron 18 votaciones ascendentes y casi 6000 visitas, por lo que ha demostrado ser útil para otros. –

+0

de acuerdo con usted. – Kannabiran

Respuesta

75

propiedades con spac integrado es deben citarse cuando se hace referencia a ellos:

$case."Remaining Time - Hours" 
+0

Has sido de gran ayuda en las últimas semanas, gracias. Es bueno que una pregunta finalmente te dé alta reputación, es gracioso que es la pregunta más simple. :-) –

+3

Gracias. Sin ánimo de ofender al sitio, pero considero que los comentarios son mejores que los puntos y las insignias. – mjolinor

+0

¡Muy bueno! @mjolinor – Ram

15

O también puede envolver esa propiedad en {}. De esta manera:

$case.{Remaining Time - Hours} 
+1

Eso es genial. Sin embargo, no parece funcionar para tablas hash. – mjolinor

21

sólo para añadir el nombre de la propiedad puede ser en sí mismo un ejemplo de variable:

PS> $o = new-object psobject -prop @{'first name' = 'John'; 'last name' = 'Doe'} 
PS> $o 

last name           first name 
---------           ---------- 
Doe            John 


PS> $prop = 'first name' 
PS> $o.$prop 
John 
+1

¡Agradable! Yo no sabía esto. Gracias. – jumbo

9

Fwiw, si llega a ser el dolor de codificar con, puede agregar una propiedad de alias:

$caseprops = @" 
Category = Inquiry 
Starred = No 
Remaining Time - Hours = 22.5 
"@ 
$case = new-object psobject -property ($caseprops | convertfrom-stringdata) 

$case | add-member aliasproperty "RT" "Remaining Time - Hours" 

$case | fl 

Remaining Time - Hours : 22.5 
Starred    : No 
Category    : Inquiry 
RT      : 22.5 
+2

Me encanta la forma en que creaste tu objeto. No he visto convertfrom-stringdata antes ... – Baodad

+1

Una respuesta menos que un 'hat trick'. – craig

Cuestiones relacionadas