텍스트를 번역하였습니다.
다양한 이유로 스크립트 실행을 일시 중지해야 할 때가 많습니다. 아마도 스크립트가 사용자 입력을 기다려야 하거나 실행 속도를 늦추어야 하거나 다른 프로세스가 완료될 때까지 기다려야 할 수 있습니다. PowerShell에서 대부분의 작업과 마찬가지로 스크립트를 일시 중지하는 여러 가지 방법이 있습니다. 달성하려는 목표에 따라 선택한 일시 중지 방법에는 강점과 약점이 있습니다. 사용 가능한 옵션에 또 다른 요소를 추가하는 것은 PowerShell의 새로운 크로스 플랫폼 기능입니다. PowerShell은 종종 Windows에서처럼 다양한 기술을 “접착제”로 사용하기 때문에 Linux 명령 줄도 PowerShell에 통합될 수 있는 실행 일시 중지 옵션을 갖고 있습니다.
PowerShell 일시 중지 방법
스크립트 실행을 일시 중지하는 다양한 방법은 무엇인가요? 이 글에서는 일시 중지 능력을 기본 및 비 기본 명령으로 분해해 보겠습니다. 여기서 기본이란 PowerShell이나 .NET에 내장된 함수 또는 메서드를 의미합니다. 비 기본 메서드는 PowerShell과 함께 사용할 수 있는 Windows 및 Linux에 특화된 프로그램으로 정의됩니다.
기본 방법
Start-Sleep
[System.Threading.Thread]::Sleep()
Read-Host
[Console]::ReadKey()
$host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
비 기본 방법
Windows
pause
timeout
Linux
sleep
read -p
여러 가지 다양한 옵션이 있음을 알 수 있습니다. 각각의 장단점이 있습니다. 사용하는 것에 따라 실행이 일시 중단되고 그 일시 중단이 포함 할 수있는 다른 효과가 영향을 미칩니다.
네이티브 메소드
먼저, 스크립트에서 가장 많이 사용되는 네이티브 메소드를 개요합니다.
Start-Sleep
가장 일반적으로 사용되는 일시 중단 명령은 Start-Sleep
입니다. This command는 -Seconds
와 -Milliseconds
라는 두 가지 간단한 입력을 사용합니다. 초는 System.Double
숫자 값이 될 수 있으며 밀리초는 System.Int32
값만 사용할 수 있습니다. 두 값을 결합하여 일시 중단의 길이를 정확하게 제어할 수 있습니다. Start-Sleep
에는 sleep
이라는 별칭이 있습니다.
PowerShell 6.2.0 이전에는 위의 코드에서 중지하는 동안과 같은 시간의 소숫점 초 값을 작성할 수 없었습니다. 6.2.0에서는 이제 소수 값을 지원합니다. 따라서 초와 밀리초를 독립적으로 작성하는 대신 이제 다음을 명시할 수 있습니다: -Seconds 2.3
.
Start-Sleep
함수에서Ctrl-C
를 사용하여 빠져나갈 수 있다는 점을 강조해야합니다. 이는 모든 방법에 대해 참이 아닙니다!
스레드 슬립
A less commonly used method of pausing execution is the [System.Threading.Thread]::Sleep()
.NET method. By passing in a System.Int32
or a TimeSpan
value, this allows pausing of the current thread for a set amount of time. For example, to pause by that same amount of time, 2.3
seconds, as in our Start-Sleep
example, we can write:
Thread Sleep 메서드를 사용하여 timespan 구조를 사용하려면 다음을 수행할 수 있습니다:
스레드를 무기한으로 일시 중지하려면 [System.Threading.Timeout]::InfiniteTimeSpan
을(를) 사용할 수 있지만, 이렇게 하면 프로세스가 잠길 수 있음을 염두에 두어야 합니다.
Start-Sleep
과 달리, Thread Sleep 메서드는Ctrl-C
를 사용하여 슬립 루틴을 탈출할 수 없습니다. 애플리케이션에 따라 이것이 선호될 수 있습니다.
또한 스레드 슬립에 대해 알아야 할 중요한 점은 정확한 시간 보장이 아니라는 것입니다. 모든 스레드 슬립은 해당하는 초만큼 기다리게 보장합니다. 스레드 슬립 카운트가 클럭 틱과 일치하므로, 다른 프로그램이 이 일시 중지 기능을 중단하고 기다리는 시간이 더 오래 걸릴 수 있습니다.
스레드 슬립에는 유용한 용도가 있지만, 이러한 문제들 때문에 다른 내장된 메서드 중 하나를 사용하는 것이 좋습니다.
Read-Host
위의 방법은 실행을 일시 중지하는 방법을 설명하지만, 일정 시간 동안만 실행을 일시 중지합니다. 실행을 일시 중지하는 또 다른 방법은 사용자 입력을 요청하는 것입니다. 이 방법을 사용하면 수동 조치가 필요하지만, 계속 진행하기 전에 확인을 요구하고 추가 입력을 포함할 수 있어 매우 유용할 수 있습니다.
Read-Host
는 사용자 입력을 요청하는 가장 흔한 방법 중 하나입니다. 사용자 입력을 요청함으로써, 결과적으로 입력된 내용은 코드에서 나중에 사용하거나 필요에 따라 실행을 일시 중지할 수 있습니다.
텍스트를 입력한 후에는 실행을 진행하기 위해 엔터 또는 리턴 키를 눌러야 합니다. 이렇게 하면 변수에 입력을 저장하지 않고도 동일한 텍스트가 콘솔에 입력됩니다.

나중에 사용할 변수에 입력된 텍스트를 저장하려면, 간단히 Read-Host
입력을 변수에 할당하면 됩니다.
때로는 입력을 안전한 문자열로 읽어 들이고 싶을 수 있습니다. 다행히도, Read-Host
를 사용하면 이 과정이 매우 간단해집니다.
Ctrl-C
를 사용하여Read-Host
프롬프트를 빠져나갈 수 있습니다.
콘솔 ReadKey 메서드
[Console]::ReadKey()
메서드를 사용하면 프로그램 실행을 일시 중지하면서 키 명령 및 수정자를 쉽게 읽어 들일 수 있습니다. 기본적으로 보내진 키 명령은 화면에 System.ConsoleKeyInfo
객체로 다시 표시됩니다. 이에는 Key
, KeyChar
, Modifiers
값이 포함되어 있으며, 특정 키 조합을 확인할 때 매우 유용할 수 있습니다.

자주 특정 키 입력을 확인한 후 계속 진행하기 전에 이를 확인하려 할 수 있습니다. 이는 아래와 같이 Do-While
루프를 사용하여 쉽게 수행할 수 있습니다.

주의하세요. 특정한 키 조합을 찾고 있기 때문에, 여기 입력에서는
Ctrl-C
키 조합은 입력에서 빠져나오지 않습니다.
호스트 RawUI ReadKey 메서드
마지막으로, $host.UI.RawUI.ReadKey()
메서드가 있습니다. 이는 Console ReadKey 메서드와 유사하지만, 이 메서드는 동작과 출력을 제어하기 위해 추가 옵션을 전달할 수 있습니다.

RawUI ReadKey 메서드를 더 유용하게 만들 수 있는 몇 가지 ReadKeyOptions
가 전달될 수 있습니다.
AllowCtrlC
IncludeKeyDown
IncludeKeyUp
NoEcho
다음과 같이 사용할 수 있으며, 이 방법은 키 다운 이벤트를 포함하고 텍스트를 출력하지 않습니다.
이 방법을 사용하면 명령을 빠져나오기 위해
Ctrl-C
를 사용할 수 있지만,AllowCtrlC
옵션이 사용된 경우는 제외합니다.
비 네이티브 메서드
이 섹션에서는 스크립트 실행을 일시 중단하는 몇 가지 비 네이티브 메서드를 탐색합니다. 이러한 방법은 PowerShell 콘솔에 특정하지 않은 유틸리티를 활용하여 필요에 따라 PowerShell 스크립트에 통합할 수 있습니다.
윈도우
일시 중단 명령은 매우 간단하며 아무 키나 누르세요 . . .
를 표시하고 키가 눌러질 때까지 실행을 일시 중단한 채로 유지합니다.

스크립트에서 이것을 어떻게 사용하는지 궁금할 수 있지만, 다른 명령어와 마찬가지로 원래 기능을 활용하려면 스크립트 내에 cmd /c 'pause'
명령을 삽입하면 됩니다.

보통 Windows 배치 파일에서 사용되는 시간초과 명령은 지정된 시간(초) 동안 일시 중단되고 선택적으로 키 명령을 무시할 수 있습니다. 일반적으로 시간초과 기간이 지나지 않았더라도 사용자가 키를 누르면 실행이 재개됩니다. 초 단위로 지정된 시간을 전달하여 매우 간단하게 사용됩니다.

pause
명령어와 마찬가지로 스크립트 내에 timeout
명령을 삽입하고 아래 예시에서는 엔터 키를 눌러 계속합니다.

리눅스
Windows의 pause
명령어와 마찬가지로 Linux의 sleep
명령어는 임의의 시간을 설정하여 대기할 수 있습니다. 일시 중단 명령과 달리 sleep
명령어에는 대기 시간에 대한 유연성을 제공하는 몇 가지 옵션이 더 있습니다.

sleep
명령어는 긴 시간 동안 대기할 수 있도록 선택적으로 접미사를 가질 수도 있습니다. 예시:
sleep 1m
– 1분 동안 대기sleep 2h
– 2시간 동안 대기sleep 1d
– 1일 동안 대기
마지막으로, Linux에서 일시 중지하는 다른 방법은 read
응용프로그램을 사용하여 실행이 계속되기 전에 Enter 키를 누르기 위해 일시 중지하는 것입니다. 지정된 시간 내에 Enter 키를 입력하지 않으면 실행이 계속될 수 있는 선택적인 타임아웃 매개변수가 있습니다.

결론
보시다시피, 스크립트나 명령줄에서 실행을 일시 중지하는 다양한 방법이 있습니다. 필요에 따라 Start-Sleep
명령어나 더 복잡한 입력 기반 프로세스로 단순화될 수 있습니다. 기본 명령어와 결합하여 PowerShell 일시 중지는 거의 모든 환경에서 유연성을 제공하며 최대한의 스크립트 유틸리티를 제공합니다.