使用两个foreach循环在PowerShell函数间传递数据遇阻
问题根源
- 未接收函数返回值:
Main函数调用Create-Staff时,没有把函数输出的结果赋值给$new变量,导致$new始终为空,自然无法遍历到内容。 - 局部变量作用域限制:
Create-Staff里的$new是函数内部的局部变量,每次调用函数都会重新初始化,跨调用无法保留数据;同时Main函数里的$new完全没定义,根本不存在有效数据。 - 返回逻辑冗余:用
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
相关产品推荐
相关产品推荐

