我有一个脚本,可以通过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线程的脚本在线程上执行函数。
有没有办法允许我的用户停止脚本并终止远程进程?
答案 0 :(得分:2)
这是一个突破循环的例子。
Write-Host "Press 'q' to quit"
while(1){
if([console]::KeyAvailable){
$key = [console]::ReadKey($true)
if($key.Key -eq 'Q') {break}
}
}
只需将if语句放入循环中即可。