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

Invoke-Command调用带数组参数的本地函数时的通用参数传递方法问询

Invoke-Command调用带数组参数的本地函数时的通用参数传递方法问询

我在PowerShell的.ps1脚本里写了一个接受字符串数组参数的函数,想通过远程调用的方式在另一台服务器上执行它(不想依赖目标服务器上有这个函数的副本)。我查过相关资料,但发现现有的方法要么只适用于非数组参数,要么在数组参数不是最后一个时才生效,遇到了奇怪的问题:

先看我的函数定义:

function Hello_Worlds { 
    param([string[]]$persons)

    foreach($person in $persons){
        write-host ("hello "+$person)
    }
}

我定义了一个数组变量$people = "bob","joe",然后尝试远程调用:

# 执行后只输出 "hello bob",第二个元素joe没被处理
Invoke-Command -ComputerName "s1" -ScriptBlock ${function:Hello_Worlds} -ArgumentList $people

后来我试了在参数列表后面加个空字符串,居然正常输出了:

# 这次能正常输出 "hello bob hello joe"
Invoke-Command -ComputerName "s1" -ScriptBlock ${function:Hello_Worlds} -ArgumentList $people, ""

这种加空参数的方式虽然能解决问题,但感觉是个不太规范的 workaround,我肯定是漏掉了什么简单正确的方法。


补充说明:
我之前看到过针对单个数组参数的处理方案,但那个方法要求我必须提前知道哪个参数是数组才行。我想要一个通用的处理方式:比如我有一个自定义生成的参数列表$myCustomGeneratedArguments,里面可能有0个或多个参数,而且其中任意数量的参数都可能是数组。有没有办法统一处理这种情况,不用每次调用前都写这样的判断逻辑?

我自己临时写了一段判断代码,但不确定这是不是最优解:

foreach($parg in $myCustomGeneratedArguments) {
    if($parg -is [array]) {
        $paramArgs += ,$parg
    }
    else {
        $paramArgs += $parg
    }
}

备注:内容来源于stack exchange,提问作者casewolf

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.23 14:42:47