2

如何從稱爲後臺作業的函數中獲取返回值?從PowerShell中的後臺作業中調用的函數獲取返回值

#Create the Status Background Job 
Start-Job -Name "jobGetStatus" -InitializationScript $InitScript -ScriptBlock {$Status = GetStatus} 

#Wait for job result 
While (Get-Job -Name "jobGetStatus" | where { $_.State -eq "Running" }) 
    {Start-Sleep 1} 

#Get Status on Timer Tick 
$Timer.Add_Tick({Get-Job -Name "jobGetStatus" | Receive-Job -Keep}) 

在我的情況下,我調用返回數組的函數「GetStatus」。該函數包含在初始化腳本中。

已經嘗試過這樣的事情:

#Get Status on Timer Tick 
$Timer.Add_Tick({$Status = Get-Job -Name "jobGetStatus" | Receive-Job -Keep}) 

這種情況是我的命....

+0

'$狀態= GetStatus' - >'GetStatus' – PetSerAl

+1

你好,請你把它放在樣品中?目標是讓工作繼續進行,並在每個計時器上獲得返回值。 – Nick32342

回答

0

你在這裏需要一個計時器?工作完成後得到結果是否合適?

$event = Register-EngineEvent -SourceIdentifier NewMessage -Action { 
     $global:Status = $event.MessageData 
    } 

    $scriptBlock = { 
    Register-EngineEvent -SourceIdentifier NewMessage -Forward 
    # here is logic for status message # 
    $statusMessage = @("Your", "status", "array", "here") 
    $null = New-Event -SourceIdentifier NewMessage -MessageData $statusMessage 

    Unregister-Event -SourceIdentifier NewMessage 
    } 

    Start-Job -Name "jobGetStatus" -ScriptBlock $scriptBlock | out-null 

    While (Get-Job -Name "jobGetStatus" | where { $_.State -eq "Running" }) 
    { 
     Start-Sleep 1 
    } 

    $global:Status # here you have your status after job is finished 

Get-EventSubscriber | Unregister-Event 

另外,不要忘記刪除任務時,你不需要它

+0

不要回答問題,在回答問題前請回答所有問題 – Mostafiz