我一直试图对通过CSV导入并由ForEach-Object调用的数据(例如服务器名称列表)执行并行命令。我已经发现foreach有一个并行的方法,但是看起来ForEach-Object没有。当我访问多个服务器来读取日志数据时,我对良好的性能感到担忧,并有以下选项:
1) PowerShell Workflow
2) PowerShell Background Job
3) Invoke-Command当我尝试选项3时,它失败了,因为我试图通过-ArgumentList发送参数,但它似乎不喜欢我从CSV推送的变量:
$($_.'CSVColumnValue')是否可以使用ForEach-Object并行执行命令,如果可以,建议采用什么方法来实现这一点?
发布于 2016-03-13 00:06:39
没有“ForEach-Object-Parallel”这样的东西,因为它是在管道中执行的。检查在MSDN第九频道的Erik Meijer和Jeffrey Snover;那些人正在PowerShell的管道上获取信息。从2008年开始,持续了一个多小时,但是.很好的管道运作方式。
“ForEach-Parallel”是一个构造,而不是管道cmdlet。它是工作流程模块的一部分,并在WindowsWindows3.0中引入。
比较:
$Items = 1..42
ForEach -Parallel ($Item in $Items) {
$Item
}通过以下方式:
1..42 | ForEach-Object -Process { $_ }发布于 2019-10-07 14:43:28
就调用-命令而言,您需要使用“使用”范围来访问局部变量:
$a = 'hi there'
invoke-command comp001 { echo $using:a }或者用管道把东西吸进来:
1,2,3 | invoke-command comp001 { echo $input } 只有在scriptblock中定义了param时,-argumentlist才能工作。医生们在这一点上做得不好。
$a = 'hi'
invoke-command comp001 { param($a) echo $a } -ArgumentList $a除非您使用args:
invoke-command comp001 { echo $args[0] } -ArgumentList $aPowershell 7预览3实际上有一个多线程"foreach-object -parallel":
1..5 | ForEach-Object -Parallel { sleep 10; 'done' }https://stackoverflow.com/questions/35852147
复制相似问题