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

使用两个foreach循环在PowerShell函数间传递数据遇阻

问题根源

  1. 未接收函数返回值:Main函数调用Create-Staff时,没有把函数输出的结果赋值给$new变量,导致$new始终为空,自然无法遍历到内容。
  2. 局部变量作用域限制:Create-Staff里的$new是函数内部的局部变量,每次调用函数都会重新初始化,跨调用无法保留数据;同时Main函数里的$new完全没定义,根本不存在有效数据。
  3. 返回逻辑冗余:用Write-Output -NoEnumerate返回整个数组没必要,应该让函数每次返回单条生成的对象,在Main里统一收集更合理。

修正方案

  • 在Main函数里初始化$new数组,专门用来接收每个Create-Staff调用返回的结果。
  • 修改Create-Staff,让它每次只返回单条生成的自定义对象,不再维护局部数组。
  • 调用Create-Staff时,把返回的对象添加到Main的$new数组中。

修正后的代码

Function Main {
    # 导入CSV并处理(替换成你的实际逻辑)
    $import = Import-Csv -Path "你的CSV路径.csv"
    # 初始化数组用于存储结果
    $new = @()

    foreach($row in $import){
        # 调用函数并将返回结果存入$new数组
        $new += Create-Staff -lastname $row.LastName -firstname $row.FirstName
    }

    foreach($user in $new){
        Write-Host "$($user.newperson) $($user.info)"
    }
}

Function Create-Staff {
    param (
        [Parameter(Mandatory=$true)]
        [string] $lastname,

        [Parameter(Mandatory=$true)]
        [string] $firstname
    )

    # 这里替换成你的实际处理逻辑
    $newperson = "$firstname $lastname"
    $info = "针对$newperson的相关信息"

    # 返回单条自定义对象
    [pscustomobject]@{
        newperson = $newperson
        info = $info
    }
}

# 执行主函数
Main

补充说明

如果确实需要在Create-Staff里维护跨调用的累加数组(比如有特殊状态需要保留),可以通过脚本作用域或者传递数组参数实现,但上面的方案更符合PowerShell函数无状态的设计习惯,代码更简洁易维护。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 01:17:14