如何在Powershell中等待线程?

时间:2018-07-29 14:18:20

标签: powershell

我创建一个新线程,

$script = {
 write-host "in script.."
}

$p = [PowerShell]::Create()
$null= $p.AddScript($script).AddArgument($object)
$p.BeginInvoke()

问题在于应用程序执行是在$ script完成之前退出 。我知道我可以使用sleep until,但是我想在ForEach中运行此代码,因此在ForEach完成之后,它要等线程完成为止。

(我需要使用Create,因为我传递了一个对象)

谁可以告诉Powershell在执行所有脚本之前留下来?

1 个答案:

答案 0 :(得分:2)

问题出在使用Write-Host。您无法对该输出执行任何操作,并且在主机之间显示该消息也不可靠。在BeginInvoke之后,您也没有捕获作业状态。以下示例将起作用:

$p = [powershell]::Create()
$null = $p.AddScript('"Testing!"')
$r = $p.BeginInvoke()

while (-not $r.IsCompleted) {
    Start-Sleep -Seconds 3
}

$runspaceResult = $p.EndInvoke($r)