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

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"

关键优化说明

  1. 修正字段引用:用$row.name替代$spreadsheet.name,确保每次只检查当前遍历行的计算机名称
  2. 添加变量初始化:提前将结果变量设为$null,避免之前的运行残留值导致误判
  3. 循环终止逻辑:找到匹配项后用break跳出循环,提升脚本执行效率
  4. 未找到退出逻辑:通过检查结果变量是否为空,判断是否未找到记录,调用Exit直接终止脚本,同时返回非0退出码标记异常状态

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 21:52:04