【发布时间】:2020-09-16 07:36:30
【问题描述】:
我想要什么:
我有一个脚本,它将 CAB 文件复制到一百多个服务器,并在它们上使用它。 这个脚本运行了一个多星期。 当我了解 Foreach-Object -parallel 功能时,我认为这会大大加快脚本的速度。但是我遇到了一个问题。由于我不是很了解 PowerShell,而且我在任何地方都没有找到有关此问题的帖子,所以我想,我要试试运气并在这里问:
预期和实际结果
我想将一个变量传递给 foreach-object cmdlet 中已执行的脚本块,如下所示:
$test = "123"
1..3|foreach-object -parallel {param($test);echo "$_, $test"} -ArgumentList($test)
我的期望:
1, 123
2, 123
3, 123
我得到了什么:
ForEach-Object:无法使用指定的命名参数解析参数集。发出的一个或多个参数不能一起使用或提供的参数数量不足。
我做错了什么?
这可能是一个小问题。但是因为我什么地方都没有,也没有找到任何帖子/代码示例。我把它贴在这里。感谢您的回答。
【问题讨论】:
-
如果脚本运行时间超过一周,我认为您需要对架构进行重大重写。并行处理可能是一种方法,但可能还有其他更智能的方法。
-
我怀疑您需要对流程进行全面返工。一种方法是将复制命令放到远程系统并让他们进行复制。您当前的大纲给人的印象是您正在从源复制到运行代码的系统,最后复制到目标。一种更快的方法是从源到目的地 - 并在目的地控制它。
-
@Lee_Dailey 这正是我想要做的。我得到了像你提到的这样的脚本:foreach Server copy cab-file,do stuff。我现在这样做:servers|foreach-object -parallel{invoke command to server (copy cab-file, do stuff)}。为了确保可读性,我想在 foreach 对象之外定义变量、函数并传递它们。在那里我遇到了我的问题。
-
啊!我在您的问题中没有看到这一点……但看起来 MartinBrandl 已经指出了问题和解决方法。优秀! [咧嘴]
标签: powershell powershell-7.0 foreach-object