我创建一个新线程,
$script = {
write-host "in script.."
}
$p = [PowerShell]::Create()
$null= $p.AddScript($script).AddArgument($object)
$p.BeginInvoke()
问题在于应用程序执行是在$ script完成之前退出 。我知道我可以使用sleep until
,但是我想在ForEach中运行此代码,因此在ForEach完成之后,它要等线程完成为止。
(我需要使用Create,因为我传递了一个对象)
谁可以告诉Powershell在执行所有脚本之前留下来?
答案 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)