2011-08-20 58 views
2

我有一个脚本,通过20个服务器上的invoke-command -asjob启动远程作业来运行传统的命令行应用程序。运行它可能需要几个小时,所以我使用了foreach循环,直到我有0个(get-job-state running)实例。在循环内部,我把写入进度告知用户有多少服务器仍在运行这个过程。停止循环PowerShell脚本并杀死由它发起的远程进程

所有工作正常,但我现在需要添加一个小功能,以允许运行此脚本的用户停止脚本并终止所有正在运行的远程作业。

现在我知道如何杀死他们,但我不知道如何让用户提供反馈回我的循环。本来我想使用异步运行空间(喜欢这里http://www.vistax64.com/powershell/16998-howto-create-windows-form-without-stopping-script-processing.html描述),弹出一个GUI按钮,但它看起来像我不能从UI线程我的脚本线程上执行的功能。

有没有办法让我的用户停止脚本和杀死远程进程?

回答

2

下面是一个打破循环的例子。

Write-Host "Press 'q' to quit" 

while(1){ 
    if([console]::KeyAvailable){ 
     $key = [console]::ReadKey($true) 
     if($key.Key -eq 'Q') {break} 
    } 
} 

只需将if语句放入循环中即可。

+0

工程就像一个魅力,非常感谢! – mishkin