簡體   English   中英

如何使用Powershell將參數從另一個函數的管道輸出傳遞給函數

[英]How to pass argument to a function from a pipe output of another using powershell

我已經編寫了一個名為Wait-UntilJobFailOrSuccess的函數。 這使用管道命令行從Get-Job獲取輸出。 例如。

 Get-Job|Remove-Job

我想為自己的功能做同樣的事情。 例如

Get-Job | Wait-UntilJobFailOrSuccess

我還在下面附加了Wait-UntilJobFailOrSuccess。 請告訴我們。 有誰對此有解決方案。

Function Wait-UntilJobFailOrSuccess
{
    [CmdletBinding()]
    param(
        [Parameter(ValueFromPipeline = $true, ValueFromPipelineByPropertyName = $true)]
        [System.Object[]]$jobs
        )
    while ($true) {
     if ('Failed' -in $jobs.State) {
        $jobs | Stop-Job 
        Write-Host "Aborting Jobs ${result}"
        break
    }

    Start-Sleep -Milliseconds 500
  }

  foreach ($job in $jobs) {
        if ($job.State -eq 'Failed') {
        Write-Host ($job.ChildJobs[0].JobStateInfo.Reason.Message) -ForegroundColor Red
    } else {
        Write-Host (Receive-Job $job) -ForegroundColor Green 
    }
  }
  $jobs|remove-Job
}

解決方案究竟是什么? 您還沒有提出問題。

無論如何,在您的代碼中將您的參數“ Jobs”命名為[ValueFromPipelineByPropertyName] 作業對象沒有Jobs屬性,因此將無法使用。 為此考慮一個單獨的參數Id 另外,不要將參數鍵入為[object[]] ,而是將其鍵入為[System.Management.Automation.Job[]] ,這是作業對象的類型。

您應該在process塊中具有邏輯以累積所有Job對象,然后在收集end所有作業后將循環移至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?
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM