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

PowerShell中ForEach-Object -Parallel无法识别自定义cmdlet问题求助

问题原因
  • 执行顺序异常:PowerShell脚本自上而下逐行执行,当前hi函数定义在ForEach-Object -Parallel语句之后,执行到并行逻辑时函数还未加载到当前会话,本身就无法识别。
  • 并行逻辑隔离:ForEach-Object的-Parallel参数对应的脚本块会运行在独立的后台运行空间中,默认不会继承父会话的自定义函数、别名等配置,就算将函数移到并行逻辑之前,也会出现找不到命令的报错。
    另外你提供的测试代码还存在无限递归问题:hi函数的Process块中调用了自身而非内部定义的sayHi,运行时会触发栈溢出报错。
修复方案

调整代码顺序+在并行块中导入父会话的自定义函数即可,修复后的代码如下:

# 先完成函数定义
function hi {
    [CmdletBinding()]
    Param (
        [Parameter(Mandatory=$true)]
        [String]$name
    )

    Begin {
        function sayHi {
            param (
                [Parameter(Position=0)]
                $name
            )

            Write-Host ">>>>"
            Write-Host "Say hi $($name)"
            Write-Host ">>>>"
        }
    }

    Process {
        # 修复递归问题:调用内部的sayHi而非自身
        sayHi $name
    }
    End{}
}

1..10 | ForEach-Object -Parallel {
    # 从父会话导入hi函数定义
    function hi { $using:function:hi }
    hi $_
    sleep 2
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 14:54:07