0

我定义了一个包含 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
4

1 回答 1

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参数来加载您的函数。我使用的语法假定该函数已加载到您当前的范围内。

于 2019-04-16T14:54:40.593 回答