2017-02-25 45 views
1

我试图在PowerShell 2.0中运行statment运行PowerShell脚本:试图在2.0版

$fixDepositsDataFile = Import-Csv F:\Balink\PowershellScripts\Wbalqry0.CSV -Header "1" 
$fixDepositsDataFile | %{ 
    if ($_.1 -eq " ") {$_.1 = " "} 
} 

而且我得到这个异常:

enter image description here

我的工作完美的5.0,但运行脚本的服务器是2.0。

有什么办法可以避免这个问题?

+0

'.1' - >'。(1)' – PetSerAl

+0

没有下划线?像这样:if($(。1)-eq“”){$(。1)=“”}?因为它不起作用= \ –

+2

像这样:'$ _。(1)'。 – PetSerAl

回答

2

显然,您不能在PowerShell v2中使用整数作为属性名称。有很多方法可以解决这个问题。例如,您可以将该属性设置为建议的@PetSerAl$_.(1))或使用变量($p = 1; ... $_.$p ...)。

我个人更喜欢把属性名引号:围绕属性名称

$fixDepositsDataFile | ForEach-Object { 
    if ($_.'1' -eq " ") {$_.'1' = ""} 
} 

行情也有助于减轻其他问题的情况下,例如当一个属性名称包含空格时。

+0

感谢您的详细解答 –

+0

值得注意的是,报价不会解决OP的问题 –

+0

为什么他们不?我没有一个真正的PS2,但引用帮助在PS5启动为V2:'powershell -version 2 -c“$ s = [pscustomobject] @ {'1'='a'}; $ s.'1'”' – wOxxOm