2011-02-01 73 views
43

我正在使用PowerShell导入CSV文件。Powershell:引用包含空格的属性

问题是,其中一列的标题是“剩余时间 - 小时”。 因此,我得到一系列对象,并且它实际上分配了属性“剩余时间 - 小时”。

引用此属性的语法是什么?

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

回报

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

,但如果我键入

$case.Remaining Time - Hours 

我得到 “意外令牌 '时间' 在表达式或语句”

+4

@Kannabiran - 数点:1)在计算器上的政策是,如果一个问题是不是在这个网站回答那么可以问,计算器往往是呼吁开发者的第一选择。 2)我在三年前发布了这个问题,在这段时间里,它收到了18个upvotes和近6000个视图,所以它被证明对其他人有用。 – 2014-05-29 03:51:29

+0

同意你的意见。 – Kannabiran 2014-05-29 04:02:54

回答

75

属性与嵌入式spac在引用它们时必须引用:

$case."Remaining Time - Hours" 
+0

过去几周你的帮助很大 - 谢谢。很好,一个问题最终会给你很高的评价 - 有趣的是这是最简单的问题。 :-) – 2011-02-06 22:43:34

+3

谢谢。网站没有任何意图,但我认为这样的评论比点和徽章更好。 – mjolinor 2011-02-07 02:38:26

+0

真的很好! @mjolinor – Ram 2016-12-22 09:40:07

15

或者您也可以在{}中包装该属性。就像这样:

$case.{Remaining Time - Hours} 
21

我想补充,属性名本身可以是一个变量如:

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 
9

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