Powershell 如何实现并行作业和队列系统
我花了几天时间试图实现一个并行作业和队列系统,但是。。。我试过了,但做不到。下面是没有实现任何内容的代码,以及从何处查看的CSV示例 我相信这篇文章可以帮助其他用户完成他们的项目 每个用户都有自己的电脑,因此CSV文件如下所示:Powershell 如何实现并行作业和队列系统,powershell,csv,parallel-processing,Powershell,Csv,Parallel Processing,我花了几天时间试图实现一个并行作业和队列系统,但是。。。我试过了,但做不到。下面是没有实现任何内容的代码,以及从何处查看的CSV示例 我相信这篇文章可以帮助其他用户完成他们的项目 每个用户都有自己的电脑,因此CSV文件如下所示: pc1,user1 pc2,user2 pc800,user800 代码: PowerShell中的并行数据处理并不十分简单,尤其是在 排队。尝试使用一些已经完成此操作的现有工具。 你可以看看这个模块 . cmdlet 拆分管道设计用于并行输入数据处理并支持 输入排
pc1,user1
pc2,user2
pc800,user800
代码:
PowerShell中的并行数据处理并不十分简单,尤其是在 排队。尝试使用一些已经完成此操作的现有工具。 你可以看看这个模块 . cmdlet
拆分管道
设计用于并行输入数据处理并支持
输入排队(请参阅参数Load
)。例如,对于4个并行
每次有10个输入项的管道代码如下所示:
$csv | Split-Pipeline -Count 4 -Load 10, 10 {process{
<operate on input item $_>
}} | Out-File $outputReport
更新:如何编写进度信息 SplitPipeline很好地处理了800个csv目标,令人惊讶。还有吗 要让用户知道脚本是否处于活动状态。。。?扫描一个大的csv可能需要大约 20分钟。比如“进行中的25%,“50%,“75% 有几种选择。最简单的方法就是调用
splitpipeline
开关-Verbose
。因此,您将收到有关进度和进度的详细消息
请确保脚本处于活动状态
另一个简单的选择是编写和查看来自作业的详细消息,
e、 g.写冗长的-详细的
,即使
splitpipeline
在调用时不使用Verbose
另一个选择是使用适当的进度消息和Write progress
。
请参阅脚本:
testprogresstotal.ps1
还显示了如何使用从作业更新的收集器
同时您可以使用类似的方法计算问题(
原始问题代码会执行此操作)。完成所有操作后,显示
问题给用户。我误解了一些事情,我通过我的代码更改了
启动作业$sb-argumentlist…,但我得到了以下错误:拆分管道:无法将参数绑定到参数“ScriptBlock”,因为它为空。您不应该在代码中使用启动作业
。“作业”是通过拆分管道为您创建的。换句话说,您应该使用稍微调整的
替换
(添加进程
块,不要使用参数,数据来自管道)。我尝试了$csv |拆分管道-计数4-加载10,10{process{$sb
但没有,尝试了一些新手更改,但没有成功…问一个有关问题的问题。错误消息是什么,如果有的话,或者什么不起作用?请参阅另一个更新部分。顺便说一句,只要它对您有效,您可以接受答案。我很高兴该工具帮助您解决了任务。
$csv | Split-Pipeline -Count 4 -Load 10, 10 {process{
<operate on input item $_>
}} | Out-File $outputReport
$csv | Split-Pipeline -Count 4 -Load 10, 10 -Variable findSize {process{
# Tips
# - Operate on input object $_, i.e $_.PCname and $_.User
# - Use imported variable $findSize
# - Do not use Write-Host, use (for now) Write-Warning
# - Do not count issues (for now). This is possible but make it working
# without this at first.
# - Do not write data to a file, from several parallel pipelines this
# is not so trivial, just output data, they will be piped further to
# the log file
...
}} | Set-Content $report
# output from all jobs is joined and written to the report file