You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell 2.0执行CSV查询脚本遇Unexpected token错误,PS3+运行正常

解决PowerShell 2.0中Import-Csv+Where-Object的语法兼容问题

嘿,这个坑我之前也踩过!PowerShell 2.0在处理带空格的属性名时,语法规则比后续版本严格得多,你代码里的$_. 'Customer Name'这部分中间多了个空格,就是触发"Unexpected token '.' in expression or statement"错误的直接原因。

快速修复方案

把带空格的属性引用改成索引器语法,这是跨PowerShell版本最兼容的写法:

$nameCheck += Import-Csv C:\temp\tokens.csv | Where-Object { $_.['Customer Name'] -clike "*$cid*" } | Select-Object 'Customer Name'

或者也可以用子表达式包裹属性名,同样能在PS2.0中正常运行:

$nameCheck += Import-Csv C:\temp\tokens.csv | Where-Object { $($_.Customer Name) -clike "*$cid*" } | Select-Object 'Customer Name'

为什么原来的代码在PS2.0里报错?

PowerShell 2.0不允许在点运算符(.)和属性名之间添加空格,而且对于包含空格的属性名,直接用$_. 属性名的写法会被解析成语法错误。而PowerShell 3.0及以后版本对这类语法做了宽松处理,所以你的脚本在高版本能正常运行。

更稳妥的长期优化

如果想彻底避免带空格属性名带来的兼容问题,可以在Import-Csv后先给属性重命名:

$nameCheck += Import-Csv C:\temp\tokens.csv | 
    Select-Object @{Name='CustomerName'; Expression={$_.'Customer Name'}} |
    Where-Object { $_.CustomerName -clike "*$cid*" } |
    Select-Object CustomerName

这样后续所有操作都用无空格的CustomerName属性,不仅兼容PS2.0,代码可读性也更好。

内容的提问来源于stack exchange,提问作者BT123

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:29:53