web-dev-qa-db-ja.com

PowerShell:スペースを含むプロパティを参照します

Powershellを使用してCSVファイルをインポートしています。

問題は、いずれかの列のタイトルが「残り時間-時間」であるということです。そのため、オブジェクトのシーケンスを取得していますが、実際には「残り時間-時間」プロパティが割り当てられています。

このプロパティを参照する構文は何ですか?

例えば

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

戻り値

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

しかし、私が入力した場合

$case.Remaining Time - Hours

「式または文に予期しないトークン 'Time'」が表示されます

51
Andrew Shepherd

スペースが埋め込まれたプロパティは、参照するときに引用する必要があります。

 $case."Remaining Time - Hours"
90
mjolinor

追加するだけで、プロパティ名自体を変数にすることができます。例:

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

または、{}でそのプロパティをラップすることもできます。このような:

 $case.{Remaining Time - Hours}
17
ravikanth

FWIW、コードを作成するのが面倒な場合は、エイリアスプロパティを追加できます。

 $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