Трубопровод в Старт-RSJob - PullRequest
0 голосов
/ 16 апреля 2019

У меня определена переменная, содержащая 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 голосов
/ 16 апреля 2019

Я не знаю, что на самом деле содержит $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 для загрузки вашей функции. Синтаксис, который я использовал, предполагает, что функция уже загружена в вашу текущую область.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...