Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powershell 如何实现并行作业和队列系统_Powershell_Csv_Parallel Processing - Fatal编程技术网

Powershell 如何实现并行作业和队列系统

Powershell 如何实现并行作业和队列系统,powershell,csv,parallel-processing,Powershell,Csv,Parallel Processing,我花了几天时间试图实现一个并行作业和队列系统,但是。。。我试过了,但做不到。下面是没有实现任何内容的代码,以及从何处查看的CSV示例 我相信这篇文章可以帮助其他用户完成他们的项目 每个用户都有自己的电脑,因此CSV文件如下所示: pc1,user1 pc2,user2 pc800,user800 代码: PowerShell中的并行数据处理并不十分简单,尤其是在 排队。尝试使用一些已经完成此操作的现有工具。 你可以看看这个模块 . cmdlet 拆分管道设计用于并行输入数据处理并支持 输入排

我花了几天时间试图实现一个并行作业和队列系统,但是。。。我试过了,但做不到。下面是没有实现任何内容的代码,以及从何处查看的CSV示例

我相信这篇文章可以帮助其他用户完成他们的项目

每个用户都有自己的电脑,因此CSV文件如下所示:

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