좋아, 잃어 버릴거야. PowerShell은 나를 짜증나게합니다. 일시 중지 대화 상자를 표시하고 싶지만 표시되지 않습니다.
PS W:\>>> $host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
Exception calling "ReadKey" with "1" argument(s): "The method or operation is not implemented."
At line:1 char:23
+ $host.UI.RawUI.ReadKey <<<< ("NoEcho")
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : DotNetMethodException
답변
cmd /c pause | out-null
(PowerShell 방식은 아니지만 훨씬 더 우아합니다.)
나무를 구하십시오. 한 줄을 사용하십시오.
답변
명확성을 위해 여기에서 선택 사항을 요약 / 요약하는 것이 가치가 있다고 생각합니다. 그런 다음 최고의 유용성을 제공한다고 생각하는 새로운 변형을 제공합니다.
<1> ReadKey (System.Console)
write-host "Press any key to continue..."
[void][System.Console]::ReadKey($true)
- 장점 : 모든 키를 허용하지만 Shift, Alt, Ctrl 수정 자 키를 올바르게 제외합니다.
- 단점 : PS-ISE에서 작동하지 않습니다.
<2> ReadKey (RawUI)
Write-Host "Press any key to continue ..."
$x = $host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
- 단점 : PS-ISE에서 작동하지 않습니다.
- 단점 : 수정 자 키를 제외하지 않습니다.
<3> cmd
cmd /c Pause | Out-Null
- 단점 : PS-ISE에서 작동하지 않습니다.
- 단점 : 처음 사용할 때 새 셸 / 창을 눈에 띄게 시작합니다. 후속 사용시 눈에 띄지 않지만 여전히 오버 헤드가 있음
<4> 읽기 호스트
Read-Host -Prompt "Press Enter to continue"
- 장점 : PS-ISE에서 작동합니다.
- 단점 : Enter 키만 허용합니다.
<5> ReadKey 합성
이것은 위의 <1>과 Adam ‘s Tech Blog의 제안에서 추출한 ISE 해결 방법 / 클러 지의 합성물입니다 (이 페이지의 이전 의견에서 Nick 제공). 저는 후자에 대해 두 가지 약간의 개선을했습니다. Set-StrictMode 를 사용하는 경우 오류를 방지하기 위해 Test-Path를 추가했습니다 (그렇지 않습니까 ?!). 올바른 위치에 프롬프트합니다.
Function Pause ($Message = "Press any key to continue . . . ") {
if ((Test-Path variable:psISE) -and $psISE) {
$Shell = New-Object -ComObject "WScript.Shell"
$Button = $Shell.Popup("Click OK to continue.", 0, "Script Paused", 0)
}
else {
Write-Host -NoNewline $Message
[void][System.Console]::ReadKey($true)
Write-Host
}
}
- 장점 : 모든 키를 허용하지만 Shift, Alt, Ctrl 수정 자 키를 올바르게 제외합니다.
- 장점 : PS-ISE에서 작동 (Enter 또는 마우스 클릭으로 만 가능)
- 단점 : 한 줄짜리가 아닙니다!
답변
콘솔에서 입력을 읽고 싶다고 가정합니다. 그렇다면 Read-Host
.
답변
이와 같은 솔루션 cmd /c pause
은 새로운 명령 인터프리터가 백그라운드에서 시작되고 실행되도록합니다. 어떤 경우에는 받아 들일 수 있지만 이것은 실제로 이상적이지 않습니다.
사용하는 솔루션 Read-Host
은 사용자가 눌러야 Enter하며 실제로 “아무 키”가 아닙니다.
이 솔루션은 진정한 “계속하려면 아무 키나 누르십시오”인터페이스를 제공하고 기본적으로 원래 pause
명령을 모방하는 새 인터프리터를 시작하지 않습니다 .
Write-Host "Press any key to continue..."
[void][System.Console]::ReadKey($true)
답변
Michael Sorens의 답변 외에도 :
<6> 새로운 프로세스의 ReadKey
Start-Process PowerShell {[void][System.Console]::ReadKey($true)} -Wait -NoNewWindow
- 장점 : 모든 키를 허용하지만 Shift, Alt, Ctrl 수정 자 키를 올바르게 제외합니다.
- 장점 : PS-ISE에서 작동합니다.