进入Start-RSJob

时间:2019-04-16 12:52:36

标签: powershell poshrsjob

我定义了一个包含1000个对象($P)的变量,并且还有一个函数将接受管道输入,并向变量(Add-Data.AccountDetail)中的每个对象添加一堆东西。与其将东西逐个添加到管道中,我不希望PoshRSJob允许我拆分被管道传输的对象并并行地添加东西。 IE占用了5个200,然后并行处理每个加法。

我不是天生的编码员,但是似乎可以接受,所以如果您不清楚,我感谢您的耐心和帮助。

$P = Get-PositionalData -AccountName T2000

$P | Start-RSJob -Name AccountDetail -Throttle 5 -ScriptBlock {
 $_ | Add-Data.AccountDetail

}

Get-RSJob | Receive-RSJob

我得到以下信息,但Receive-RSJob中似乎没有任何内容。我当然误会了一些基本的东西!

Error          : 
Verbose        : 
Debug          : 
Warning        : 
Progress       : 
HasMoreData    : True
HasErrors      : False
Output         : 
RunspacePoolID : fc217600-123f-4d73-9bcc-d1df6f87f6d8
Completed      : False
Batch          : fc217600-123f-4d73-9bcc-d1df6f87f6d8

Name           : AccountDetail
ID             : 169
State          : NotStarted
InputObject    : @{AccounId=T2000}
InstanceID     : 3ba5eeed-d48f-4712-8d32-08f5b12a46a3
Handle         : System.Management.Automation.PowerShellAsyncResult
Runspace       : 
InnerJob       : System.Management.Automation.PowerShell
Finished       : System.Threading.ManualResetEvent
Command        : 

                 $_| Add-Data.AccountDetail

1 个答案:

答案 0 :(得分:0)

我不知道$P包含1000个对象时实际上包含什么,所以我只能假设。您只需要微调Start-RSJob命令作业。

$P | Start-RSJob -Name {$_.AccounId} -Throttle 5 -ScriptBlock {
 $_ | Add-Data.AccountDetail
} -FunctionsToLoad "Add-Data.AccountDetail"

-Name参数是作业的名称。您需要为每个要运行的作业使用一个新名称。我用{$_.AccounId}替换了您的值,因为根据您的示例,我假设$P中的每个对象都包含属性AccounId。您不必这样做,但我只是提供一种为每个工作添加一些独特性的方法。关于此参数的好处是它知道当前的管道对象($_)。

您正在使用名为Add-Data.AccountDetail的自定义函数。传递给Start-RSJob的脚本块可能对该功能一无所知。您可以使用FunctionsToLoad参数来加载函数。我使用的语法假定该函数已在您当前的作用域中加载。

相关问题