停止循环PowerShell脚本并终止它启动的远程进程

时间:2011-08-20 18:38:25

标签: powershell kill

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

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

现在我知道如何杀死它们,但我不知道如何让用户向我的循环提供反馈。最初我在考虑使用异步运行空间弹出一个GUI按钮(如此处所描述的http://www.vistax64.com/powershell/16998-howto-create-windows-form-without-stopping-script-processing.html)但看起来我无法使用来自UI线程的脚本在线程上执行函数。

有没有办法允许我的用户停止脚本并终止远程进程?

1 个答案:

答案 0 :(得分:2)

这是一个突破循环的例子。

Write-Host "Press 'q' to quit"

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

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