Ser*_*uei 8 powershell powershell-2.0
脚本在循环中执行以下步骤,假设两个步骤都需要很长时间才能完成:
$x = DoSomeWork;Start-Job -Name "Process $x" { DoSomeMoreWork $x; };当然,第1步阻止脚本,第2步没有.我可以通过控制台轻松监控循环的进度/状态和步骤1.
我还想做的是在批处理仍在执行时监视由步骤2启动的作业的作业状态.
通常,可以从另一个会话"附加"或查询另一个PowerShell会话吗?(假设监视会话不会产生工作者会话)
如果我关注您,那么您就无法在两个不同的控制台实例之间共享状态。也就是说,按照你想要的方式去做是不可能的。但是,您不能从同一会话监视作业,这是不正确的。您可以使用作业内的事件发出信号:
Start-Job -Name "bgsignal" -ScriptBlock {
# forward events named "progress" back to job owner
# this even works across machines ;-)
Register-EngineEvent -SourceIdentifier Progress -Forward
$percent = 0
while ($percent -lt 100) {
$percent += 10
# raise a new progress event, redirecting to $null to prevent
# it ending up in the job's output stream
New-Event -SourceIdentifier Progress -MessageData $percent > $null
# wait 5 seconds
sleep -Seconds 5
}
}
Run Code Online (Sandbox Code Playgroud)
现在,您可以选择使用 或Wait-Event [-SourceIdentifier Progress]普通Register-EngineEvent -SourceIdentifier Progress [-Action { ... }]的旧式交互Get-Event来查看和/或操作同一会话(或者如果您在远程服务器上启动作业,则使用不同的计算机)的进度。
如果所有工作都在本地计算机上完成,您也完全有可能不需要作业基础设施。看一下我关于 RunspaceFactory 和 PowerShell 对象的旧博客文章,了解基本脚本“线程池”实现:
http://www.nivot.org/2009/01/22/CTP3TheRunspaceFactoryAndPowerShellAccelerators.aspx
希望这可以帮助,
-奥辛
| 归档时间: |
|
| 查看次数: |
10227 次 |
| 最近记录: |