我有一个包含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
我不知道当它有1000个物体时$P
实际上包含什么,所以我只能假设。你只需要稍微调整你的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
的scriptblock可能对该函数一无所知。您可以使用FunctionsToLoad
参数加载您的函数。我使用的语法假定该函数已经加载到您当前的作用域中。