PowerShell 스크립트를 일시적으로 중지하는 방법
스크립트는 특히 Windows 환경에서 작업을 자동화하는 데 유용한 도구입니다. PowerShell은 유연성이 뛰어나기 때문에 이러한 용도로 자주 사용됩니다.하지만 때로는 스크립트를 일시 중지해야 할 때가 있습니다.예를 들어 사용자의 입력을 기다리거나 특정 프로세스를 잠시 중단해야 할 수 있습니다.특히 특정 시간 동안 지연시키거나 사용자의 키 입력을 기다리는 등 여러 가지 상황에서 스크립트를 일시 중지하는 최적의 방법을 찾는 것은 다소 어려울 수 있습니다.이 가이드에서는 PowerShell 스크립트를 특정 시간 동안 또는 사용자가 키를 누를 때까지 일시 중지하는 방법을 설명합니다.또한 명령 프롬프트(cmd.exe)를 사용하는 것과 PowerShell의 작동 방식이 완전히 동일하지는 않으므로 차이점을 알아두는 것이 좋습니다.
스크립트를 작성할 때, 스크립트가 멈추지 않고 계속 실행되는 것에 지칠 수 있습니다.바로 이럴 때 일시 정지 기능이 유용합니다.프로세스를 자동화하면서도 제어하고 싶을 때, 이러한 일시 정지를 통해 실행 흐름을 더 효과적으로 관리할 수 있습니다.예를 들어, 다음 단계로 넘어가기 전에 지연 시간을 추가하거나, 사용자 입력을 기다린 후 다음 단계로 진행할 수 있습니다.참고로, 일부 명령어는 PowerShell과 명령 프롬프트(cmd)에서 작동 방식이 다를 수 있으므로, 이러한 차이점을 알아두면 혼동을 방지하는 데 도움이 됩니다.
PowerShell 스크립트를 특정 시간 동안 또는 사용자 입력이 있을 때까지 일시 중지하는 방법
스크립트를 정확한 시간(초) 동안 일시 중지합니다.
이 방법이 가장 간단하고 꽤 안정적입니다.스크립트 실행을 특정 시간(초) 동안 지연시키기만 하면 되는 경우 Start-Sleep 명령어를 사용할 수 있습니다.이 명령어는 직관적이며 사용자 상호 작용에 의존하지 않기 때문에 효과적입니다.대기할 시간(초 또는 밀리초)만 지정하면 됩니다.
- 사용법:
Start-Sleep -Seconds 5— 이 명령은 정확히 5초 동안 기다립니다.정확한 작동 원리는 알 수 없지만, 일부 설정에서는 특히 시스템 부하가 걸린 경우 절전 시간이 약간 오차가 발생할 수 있습니다.하지만 대부분의 경우 상당히 정확합니다.
더 짧은 일시 정지가 필요한 경우 밀리초 단위로 지정할 수도 있습니다 Start-Sleep -Milliseconds 500.이는 0.5초 정도의 지연을 원할 때 유용할 수 있습니다.
사용자가 취소할 수 있는 타임아웃 기능을 사용하여 일시 중지합니다.
또 다른 방법은 PowerShell의 타임아웃 명령어를 사용하는 것인데, 이 명령어는 다소 특이합니다.최대 대기 시간을 설정할 수 있지만, 핵심 기능은 사용자가 아무 키나 눌러 남은 대기 시간을 건너뛸 수 있다는 점입니다.이는 일시 정지를 원하지만 사용자에게 더 빨리 계속할 수 있는 옵션을 제공하고 싶을 때 유용합니다.
- 예시:
timeout /t 10— 이 코드는 10초 동안 대기하지만, 사용자가 아무 키나 누르면 즉시 다음 단계로 넘어갑니다.
여기서 좀 특이한 점이 있습니다. PowerShell에서는 명령 프롬프트 timeout /t 10내에서 명령어를 실행하면 잠시 대기하지만, 키를 누르면 조기에 종료됩니다.즉, 시간 제한이 있는 일시 정지 기능과 선택적 조기 종료 기능이 결합된 형태입니다.다만, 명령 프롬프트를 실행하지 않고 순수 PowerShell 명령어만으로는 이 기능이 작동하지 않는다는 점을 유의해야 합니다.또한, 일부 사용자는 특정 Windows 버전에서 동작 방식이 다르거나 특수 구문이 필요할 수 있다고 보고했습니다.
PAUSE 명령어를 사용하여 스크립트를 중지하고 사용자 입력을 기다리는 방법
사용자가 Enter 키를 누를 때까지 완전히 멈추고 기다리는 것이 목표라면, 기존의 PASUE 명령어를 사용할 수 있습니다.이 명령어는 PowerShell의 기본 명령어는 아니지만, cmd /c pausePowerShell 내에서 실행하거나 cmd.exe에서 직접 실행할 수 있습니다.
- 예시:
cmd /c pause.이 코드가 실행되면 “계속하려면 아무 키나 누르세요…”라는 메시지가 표시되고, 키가 눌릴 때까지 기다립니다.
이 방법은 사용자가 작업을 시작하기 전에 준비되었는지 확인해야 하는 수동 스크립트에 적합합니다.하지만 백그라운드 작업이나 자동화된 스크립트에는 적합하지 않습니다.이러한 스크립트는 사용자 입력에 반응할 수 없기 때문입니다.
이 방법은 cmd.exe에서도 작동하나요?
네, 동일한 명령어를 명령 프롬프트에서도 사용할 수 있지만 몇 가지 주의 사항이 있습니다.Start-Sleep`run`은 PowerShell cmdlet이므로 PowerShell을 명시적으로 호출하지 않으면 명령 프롬프트에서 실행되지 않습니다.하지만 `run`이나 `run` timeout /t과 같은 명령어는 pause명령 프롬프트에 내장되어 있습니다.timeout명령 프롬프트에서 `run` 명령어를 사용하면 스크립트가 잠시 대기하다가 키를 눌러 조기에 취소할 수 있도록 할 수 있습니다.
흥미롭게도 Sleep(하이픈이나 PowerShell 모듈 없이) 사용하면 명령 프롬프트에서는 작동하지 않으므로 PowerShell에서만 사용할 수 있습니다.반면에 배치 파일을 작성할 때는 이 timeout명령어 pause가 유용합니다.
결론적으로, 어떤 일시 중지 방법이 효과적인지는 사용 환경에 따라 다릅니다.특히 스크립트가 다양한 Windows 버전이나 구성에서 예상대로 작동하지 않는 경우에는 시행착오를 거쳐야 할 수도 있습니다.
관련 기사
이 글이 도움이 되었나요?