按热键可在循环期间重新运行脚本,但不要等待它

时间:2017-02-03 17:22:59

标签: loops powershell keyboard-shortcuts

基本上我有一个运行的脚本,它开始 - 睡眠30分钟然后再循环并重新运行。我想知道是否有办法点击窗口,按热键,然后手动刷新?

 while($true){
    $data = @("device1", "device2")

    ForEach ($server in $data) {

    ping $server

start-sleep 1800
clear
     }
    }

2 个答案:

答案 0 :(得分:2)

我通过其他方法发现,下面的内容允许我检查屏幕上是否有按键,如果有按键则会中断,但仍然处于启动 - 睡眠状态。

$timeout = New-TimeSpan -Minutes 30

$sw = [diagnostics.stopwatch]::StartNew()

while ($sw.elapsed -lt $timeout){

        if ($host.UI.RawUI.KeyAvailable) {

            $key = $host.UI.RawUI.ReadKey() 

            break 

            }

start-sleep -seconds 5          

     }

答案 1 :(得分:1)

我的猜测,你最好的选择是在你的主循环中实现一个for循环,每5-15秒检查一次按键,如果它检测到,它会自行断开,所以你的while循环可以重新开始,这里有一些似乎相关的链接:

Waiting for user input with a timeout
https://blogs.msdn.microsoft.com/timid/2014/01/29/read-host-with-a-timeout-kind-of/
How to stop while($true) that contains start-sleep in powershell
Is there a way to catch ctrl-c and ask the user to confirm?