Решение для чего именно? Вы не указали проблему.
В любом случае, в своем коде вы называете свой параметр «Работа», а затем задаете его как [ValueFromPipelineByPropertyName]
. Объекты заданий не имеют свойства Jobs
, поэтому это не будет работать. Для этого рассмотрим отдельный параметр Id
. Кроме того, вместо того, чтобы вводить параметр как [object[]]
, введите его как [System.Management.Automation.Job[]]
, который является типом объекта задания.
У вас должна быть логика в блоке process
, чтобы накапливать все объекты Job
, а затем перемещать циклы в блок end
после того, как все задания собраны.
Я переформатировал ваш код и немного его очистил, но все еще не могу понять, что вы на самом деле пытаетесь сделать:
Function Wait-UntilJobFailOrSuccess
{
[CmdletBinding()]
param(
[Parameter(Mandatory, ValueFromPipeline)]
[System.Management.Automation.Job[]]
$jobs
)
begin
{
$joblist = @()
}
process
{
$joblist += $jobs
}
end
{
foreach ($job in $joblist)
{
if ($job.State -eq 'Failed')
{
Stop-Job -Job $job
Write-Host "Aborting Job $(job.name)"
break
}
}
Start-Sleep -Milliseconds 500
foreach ($job in $jobslist)
{
if ($job.State -eq 'Failed')
{
Write-Host ($job.ChildJobs[0].JobStateInfo.Reason.Message) -ForegroundColor Red
}
else
{
Write-Host (Receive-Job $job) -ForegroundColor Green
}
}
$joblist | Remove-Job -Force # Is this what you really want to do?
}
}