PowerShell多重ForEach循环与IF语句运行报错原因及解决方法
故障根本原因
脚本报错和你写了多个ForEach/IF语句没有关联,核心问题是引号字符不兼容:你代码中包裹字段名使用的是中文全角双引号“”,而PowerShell解析器仅支持识别英文半角双引号",全角引号被识别为无效乱码,才触发了一系列语法解析错误,报错信息中的“就是全角引号解码错误的特征标识。
修复方案
将脚本中所有全角双引号替换为英文半角双引号即可正常运行,同时可以将两次列表遍历合并为一次,提升执行效率,修复后的完整代码如下:
# 提前配置变量 $ListName = "替换为你的实际SharePoint列表名" $date = Get-Date "202X-XX-XX" # 替换为你需要匹配的实际日期 # 获取SharePoint列表内容 $listItems= (Get-PnPListItem -List $ListName -Fields "Title","InquestTwoDate", "InquestThreeDate" -PageSize 1000) # 单次遍历处理两个字段的判断 ForEach ($listItem in $listItems) { # 第一个独立IF:处理InquestTwoDate字段 If($listItem["InquestTwoDate"] -eq $date) { Set-PnPListItem -List $ListName -Identity $listItem -Values @{"InquestTwoDate"=$null} } # 第二个独立IF:处理InquestThreeDate字段,两个判断互相独立互不影响 If($listItem["InquestThreeDate"] -eq $date) { Set-PnPListItem -List $ListName -Identity $listItem -Values @{"InquestThreeDate"=$null} } }
优化提示:原代码中
-eq "$date"将日期变量强制转为字符串,可能因日期格式不匹配导致判断失效,直接使用-eq $date匹配日期类型数据更稳妥。
单脚本多独立IF语句编写规则
你可以在同一个脚本内编写任意数量带执行动作的独立IF语句,只要满足以下基础规则即可正常运行:
- 每个IF的判断条件用英文半角括号
()包裹 - 每个IF对应的执行逻辑用英文半角大括号
{}包裹 - 多个IF语句按执行顺序依次编写即可,无需额外连接符
- 所有代码符号均使用英文半角格式,避免编码解析错误
内容的提问来源于stack exchange,提问作者alexthannah
相关产品推荐
相关产品推荐

