在where-object Powershell的输入参数中连字符

时间:2015-10-15 09:52:18

标签: powershell csv powershell-ise

我是Powershell的初学者。我有一些疑问。我使用Import-Csv cmdlet作为从旧软件生成的制表符分隔文本文件。下面是分隔文件的等效版本。从文本文件中我必须过滤那些目的地 - >observability§bin为1的条目。

Time [s]       Offset_Angle        destination->observability§bin
0.00E+00     -0.20402611670286        0.00000000000000E+00
4.32E+02      0.21319658757004        0.00000000000000E+00
8.64E+02      0.26803683992125        0.00000000000000E+00
1.30E+03      2.67379011780784        1.00000000000000E+00
1.73E+03     -2.89704767087971        1.00000000000000E+00
2.16E+03     -2.93302157473406        1.00000000000000E+00

代码段如下

$ap = Import-Csv -Delimiter "`t" -Path E:\Myfiles\textfile.txt

$ap|where-Object {$_.destination->observability§bin -eq "1.00000000000000E+00”}

我得到了第一线工作。当我执行第二行时,它会抛出一条错误消息。

At line:1 char:34
+ $ap|where-Object {$_.destination->observability§bin
+                                  ~                                   
You must provide a value expression following the '-' operator.
At line:1 char:53
+ ... _.destination->observability§bin -eq '1.0000 ...
+                                      ~~~                                                              
Unexpected token '-eq' in expression or statement.
    + CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException
    + FullyQualifiedErrorId : ExpectedValueExpression

所以我猜输入参数中的' - '符号作为运算符(char 34)。我还在 - 符号之前尝试了一些转义字符,例如后面的​​勾号(`)。但没有得到任何东西。请帮帮我。

感谢。

3 个答案:

答案 0 :(得分:3)

您应将其括在引号中:

$ap | Where-Object {$_."destination->observability§bin" -eq "1.00000000000000E+00"}

虽然您可能还遇到§字符

的问题

答案 1 :(得分:2)

尝试使用import-csv cmdlet的-header子句为这三个字段提供自己的名称,并将它们命名为合理的名称。您可能必须对其进行编程以跳过csv的第一条记录,以防止读取实际标题,就好像它是第一条记录一样。

答案 2 :(得分:0)

谢谢大家。在引号内添加名称无效。当我将标题名称更改为没有连字符和任何其他特殊字符

的合法名称时,它可以工作