PowerShell中Foreach循环未找到值时如何终止脚本?Else无效问题
PowerShell脚本优化:未找到目标计算机时自动退出
你的脚本存在两个核心问题:
- 循环中错误引用了整个CSV集合的
name字段($spreadsheet.name),应该指向当前遍历的行$row.name - 缺少未找到匹配项时的退出逻辑
以下是修正并优化后的脚本:
# 获取本地计算机名称 $computerid = hostname # 导入CSV文件 $spreadsheet = Import-Csv -Path '\\<redacted>\software\Scripts\x2goScript\WorkstationList.csv' # 初始化变量,避免残留值干扰判断 $orange = $null $ipaddr = $null # 遍历CSV行查找匹配项 foreach ($row in $spreadsheet) { if ($computerid -eq $row.name) { $orange = $row.OrangeID $ipaddr = $row.ServerIP break # 找到匹配后立即跳出循环,减少不必要的遍历 } } # 检查是否找到有效记录,未找到则终止脚本 if (-not $orange -or -not $ipaddr) { Write-Host "未找到当前计算机[$computerid]的对应记录,脚本退出" Exit 1 # 返回非0退出码,便于后续判断脚本执行状态 } # 后续可继续使用$orange和$ipaddr变量 # 示例:输出匹配到的信息 Write-Host "匹配记录:OrangeID=$orange,ServerIP=$ipaddr"
关键优化说明
- 修正字段引用:用
$row.name替代$spreadsheet.name,确保每次只检查当前遍历行的计算机名称 - 添加变量初始化:提前将结果变量设为
$null,避免之前的运行残留值导致误判 - 循环终止逻辑:找到匹配项后用
break跳出循环,提升脚本执行效率 - 未找到退出逻辑:通过检查结果变量是否为空,判断是否未找到记录,调用
Exit直接终止脚本,同时返回非0退出码标记异常状态
内容的提问来源于stack exchange,提问作者Commissar0617
相关产品推荐
相关产品推荐

