[powershell] PowerShell 2.0으로 ‘일시 중지’를 어떻게 수행합니까?

좋아, 잃어 버릴거야. 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에서 작동합니다.

답변