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



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

 while($true){
    $data = @("device1", "device2")
    ForEach ($server in $data) {
    ping $server
start-sleep 1800
clear
     }
    }

我通过其他方法发现,下面的方法允许我检查屏幕是否有任何按键按下并中断(如果有),但仍然处于启动睡眠状态。

$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          
     }

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

等待用户输入
超时
https://blogs.msdn.microsoft.com/timid/2014/01/29/read-host-with-a-timeout-kind-of/如何在 Powershell
中包含开始-睡眠时停止 ($true)有没有办法捕获ctrl-c并要求用户确认?

相关内容

  • 没有找到相关文章