2017-02-03 1 views
0

기본적으로 스크립트가 실행되고 30 분 동안 시작 - 절전 모드가 실행되고 다시 돌아와 다시 실행됩니다. 창을 클릭하고 단축키를 누른 다음 수동으로 새로 고칠 수있는 방법이 있는지 궁금합니다.단축키를 눌러 루프 중에 스크립트를 다시 실행하지만 기다리지 마십시오.

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

    ForEach ($server in $data) { 

    ping $server 

start-sleep 1800 
clear 
    } 
    } 
+0

실례합니다. 코드 예가 ​​있습니까? – 4c74356b41

+0

내 스크립트가 반복되는 것을 제외하고는 어떻게 시작해야할지 모르기 때문에 그다지 잘 모르겠다. 그런 다음 그 루프가 어떻게되는지 보여주는 작은 예제를 추가했다. – Aaron

+0

나는이 스크립트에 아무 문제가 없다고보고 있는데, 무엇이 누락 되었습니까? – 4c74356b41

답변

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   

    } 
+0

게시 해 주셔서 감사합니다. – 4c74356b41

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?

관련 문제