有没有更好的方法来微调代码?

时间:2015-09-18 07:41:15

标签: powershell

我是一个新手编程。我需要编写如下的脚本。

# { ---A ---}
# define N task object, N is dynamically generated
$task1 = {commandA $p1}
...
$taskN = {commandA $pN}

# { ---B ---}
# if there is N task, it will have N jobs
$job1 = Start-Job -ScriptBlock $task1 
...
$jobN = Start-Job -ScriptBlock $taskN 

# { ---C ---}
# Feed those N job to wait-job 
$null = Wait-Job -Job $job1,$job2,...,$jobN

# { ---D ---}
$result1 = Receive-Job -Job $job1
...
$result15 = Receive-Job -Job $jobN

# { ---E ---}
Remove-Job -Job $job1,$job2,...,$jobN

最初我打算用一个循环写一节" A,B和D"因为我不想复制和粘贴N次。但是,如果我使用循环,我不知道如何在C和E节中提供这些对象,因为N是动态生成的。如果你能提供一些提示,那就太好了。

1 个答案:

答案 0 :(得分:0)

我同意@Swonkie,如果您描述了您尝试解决的实际问题,而不是描述您认为的解决方案,那么您将获得更好的答案。

但是,要回答您的直接问题,您可以在列表中组织您的任务:

$tasks = @()
$tasks += {commandA $p1}
...
$tasks += {commandA $pN}

获得此列表后,您可以使用循环处理它以启动单个作业,并将其收集在另一个可用于进一步处理的列表中:

$jobs = $tasks | ForEach-Object {
          Start-Job -ScriptBlock $_
        }

Wait-Job -Job $jobs | Out-Null

$results = @()
$jobs | ForEach-Object {
  $results += Receive-Job -Job $_
}

Remove-Job -Job $jobs