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