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

PowerShell如何将Foreach循环内的多轮测试结果存入Array数组

可行性判断

你写的$result = @(foreach ($e in $example){})写法完全可行,这是PowerShell的标准数组收集写法:数组子表达式运算符@()会自动捕获foreach循环内部所有输出的内容,合并为数组赋值给$result变量。

原有代码问题修正

你当前的测试代码有两个问题需要调整才能正常收集结果:

  1. 代码中使用的return语句会直接终止当前作用域(脚本/函数)的执行,只要触发任意一次return就会直接跳出整个循环,无法完成所有$e的遍历,同时return返回的值也不会被数组捕获。你需要把所有return语句改为直接输出对应布尔值即可。
  2. 你写的$test2.stop()语句位于return之后,属于永远不会执行的死代码,需要调整位置到分支逻辑之前。

修正后可正常收集结果的代码示例

$result = @(foreach ($e in $example)
{
    # 执行第一项测试
    if((Example test) -eq $true){
        $test2 = new-object 'test' $e
        # 执行第二项测试
        if($test2.result -eq 'example2')
        {
            # 输出结果会被自动收集到$result数组
            $true
        }
        else
        {
            Write-host $e 'N/A'
            $false
        }
        # 调整位置保证停止逻辑正常执行
        $test2.stop()
    }
    else{
        write-host 'N/A2'
        $false
    }
})

# 输出最终的结果数组
$result

优化建议

  • 如果需要同时记录每个结果对应的测试项,你可以输出自定义对象,后续排查更方便:
    # 替换原来输出$true/$false的位置
    [PSCustomObject]@{
        测试元素 = $e
        测试结果 = $true # 对应你的测试结果替换为$false即可
    }
    
  • 可以给测试逻辑加上try/catch包裹,避免单条测试报错中断整个遍历流程,异常场景可以单独标记结果状态。
  • PowerShell中布尔判断可以简化写法,if(Example test)等价于if((Example test) -eq $true),不需要额外加比较语句。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 23:36:04