PowerShell遍历CSV文件时if语句仅执行if分支不进入else分支求助
排查结论
你的脚本存在两处核心错误,是导致永远触发if分支的原因:
- 第一处:相等比较运算符误用
PowerShell中=是赋值运算符,不是比较运算符。你写的$row.operation = "add"逻辑是把字符串add赋值给$row的operation属性,赋值操作的返回值永远是非空的真值,所以if判断永远成立,不会进入else分支。
正确的相等判断应该使用-eq运算符,判断语句改为If ($row.operation -eq "add")即可。 - 第二处:管道语法逻辑错误
你在Import-Csv语句后直接通过管道接Select-Object,但是没有把筛选后的结果赋值给$members变量,筛选后的结果会直接输出到控制台被丢弃,$members实际存储的是未做列筛选的原始CSV数据,虽然此处不影响operation属性的读取,但属于语法错误,修正方式有两种:- 把筛选结果赋值给变量:
$members = import-csv membership.csv | select-object "id","group","operation" - 直接通过管道遍历,不需要单独赋值变量,示例见下方修正代码。
- 把筛选结果赋值给变量:
修正后的完整代码
# 方式1:先赋值变量再遍历 $members = Import-Csv membership.csv | Select-Object "id","group","operation" foreach ($row in $members) { if ($row.operation -eq "add") { Write-Host "This is IF statement" } else { Write-Host "This is ELSE statement" } } # 方式2:直接管道遍历(不需要额外赋值变量) Import-Csv membership.csv | Select-Object "id","group","operation" | ForEach-Object { if ($_.operation -eq "add") { Write-Host "This is IF statement" } else { Write-Host "This is ELSE statement" } }
内容的提问来源于stack exchange,提问作者jmpg85
相关产品推荐
相关产品推荐

