web-dev-qa-db-fra.com

Powershell: référence une propriété qui contient un espace

J'importe un fichier CSV à l'aide de PowerShell.

Le problème est que le titre d'une des colonnes est "Temps restant - Heures". Je reçois donc une séquence d'objets, et la propriété "Temps restant - Heures" lui est en fait attribuée.

Quelle est la syntaxe pour faire référence à cette propriété?

par exemple

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

retour

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

mais si je tape

$case.Remaining Time - Hours

J'obtiens "Jeton inattendu 'Time' dans l'expression ou la déclaration"

51
Andrew Shepherd

Les propriétés avec des espaces intégrés doivent être citées lorsqu'elles sont référencées:

 $case."Remaining Time - Hours"
90
mjolinor

Juste pour ajouter, le nom de la propriété peut lui-même être une variable, par exemple:

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
23
Keith Hill

Ou vous pouvez également envelopper cette propriété dans {}. Comme ça:

 $case.{Remaining Time - Hours}
17
ravikanth

FWIW, s'il devient difficile de coder avec, vous pouvez ajouter une propriété d'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
11
mjolinor