PowerShell如何将Foreach循环内的多轮测试结果存入Array数组
可行性判断
你写的$result = @(foreach ($e in $example){})写法完全可行,这是PowerShell的标准数组收集写法:数组子表达式运算符@()会自动捕获foreach循环内部所有输出的内容,合并为数组赋值给$result变量。
原有代码问题修正
你当前的测试代码有两个问题需要调整才能正常收集结果:
- 代码中使用的
return语句会直接终止当前作用域(脚本/函数)的执行,只要触发任意一次return就会直接跳出整个循环,无法完成所有$e的遍历,同时return返回的值也不会被数组捕获。你需要把所有return语句改为直接输出对应布尔值即可。 - 你写的
$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
相关产品推荐
相关产品推荐

