(,$arrr) 是将单个数组作为参数列表传递给 powershell invoke-command cmdlet 的最佳方法吗?[复制]

Is (,$arrr) the best way to pass a single array as an argument list to a powershell invoke-command cmdlet? [duplicate]

提问人:Nigel Davies 提问时间:12/27/2022 最后编辑:Nigel Davies 更新时间:12/28/2022 访问量:104

问:

这个问题在这里已经有答案了:
11个月前关闭。

这篇文章是在 11 个月前编辑并提交审核的,但未能重新打开该帖子:

原始关闭原因未解决

我想将数组传递给 PowerShell 脚本块。这是公认的方法:

$arr = 1..4; 
invoke-command -ScriptBlock { Param($li); $li | %{$_}} -ArgumentList (,$arr)

根据我的调查,这些替代方案也有效:

invoke-command -ScriptBlock { Param($li); $li | %{$_}} -ArgumentList $arr,$arr
invoke-command -ScriptBlock { Param($li); $li | %{$_}} -ArgumentList $arr,$null

当使用列出这个时,同样的问题也适用

$arr = 1..4; 
$sb = { Param($li); $li | %{$_}}
$sb.Invoke((,$arr))

我理解 (,$arr) 语法的原因是 -ArgumentList 参数期望将参数数组传递给脚本块,如果它获得单个数组作为其值,它将解压缩数组并将内容作为多个参数传递给脚本块。我认为这些答案如何以及为什么帮助我度过了难关。

公认的解决方案在我看来非常丑陋,我想知道有一种更干净的方法可能更接近 PowerShell 设计者的意图。请发表评论。

也许答案是

& $sb $arr.

请发表评论。

PowerShell Lambda 匿名函数 调用 脚本块

评论

2赞 Mathias R. Jessen 12/27/2022
你为什么在这里使用?Invoke-Command
0赞 Santiago Squarzon 12/27/2022
$using:更简单,但适用于远程会话
0赞 js2010 12/28/2022
不。但通常 invoke-command 适用于远程计算机。
0赞 Nigel Davies 12/28/2022
@js2010:这是一个简化的例子来理解问题。我正在探索 lambda 函数和 powershell 函数编程,灵感来自 powershell 练习的累积练习。(谷歌一下:还没有完全发布)
0赞 Nigel Davies 12/28/2022
感谢您的结束语:不是!我也找到了那些较旧的例子,但对我来说,说该怎么做,但不清楚为什么。

答: 暂无答案