programing

PowerShell 2.0에서 '일시 중지'를 수행하는 방법은 무엇입니까?

cafebook 2023. 4. 28. 21:31
반응형

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

명확한 설명을 위해 여기서 선택 사항을 요약/요약할 가치가 있다고 생각합니다.그리고 최고의 유용성을 제공하는 새로운 버전을 제공합니다.

읽기 키(시스템).콘솔)

write-host "Press any key to continue..."
[void][System.Console]::ReadKey($true)
  • 장점:모든 키를 사용할 수 있지만 Shift, Alt, Ctrl 수정자 키는 제대로 제외합니다.
  • 단점:PS-ISE에서는 작동하지 않습니다.

읽기 키(원시)UI)

Write-Host "Press any key to continue ..."
$x = $host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
  • 단점:PS-ISE에서는 작동하지 않습니다.
  • 단점:한정자 키를 제외하지 않습니다.

cmd

cmd /c Pause | Out-Null
  • 단점:PS-ISE에서는 작동하지 않습니다.
  • 단점:처음 사용할 때 눈에 띄게 새 셸/창을 시작합니다. 이후 사용할 때는 눈에 띄지 않지만 오버헤드가 있습니다.

읽기-호스트

Read-Host -Prompt "Press Enter to continue"
  • 장점:PS-ISE에서 작동합니다.
  • 단점:Enter 키만 사용할 수 있습니다.

읽기 키 컴포지트

Adam's Tech Blog의 제안서에서 추출한 ISE 해결 방법/Kully와 위의 <1>을 합성한 것입니다(이 페이지의 이전 의견에서 Nick에게 감사드립니다).후자에 대해 두 가지 약간의 개선을 했습니다. 엄격한 설정 모드(사용자가 사용하는 경우)를 사용하는 경우 오류를 방지하기 위해 테스트 경로를 추가한 것과 키 입력 후 새 줄을 추가하여 프롬프트를 올바른 위치에 배치하는 최종 쓰기 호스트를 추가한 것입니다.

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 또는 마우스 클릭만으로 작동)
  • 단점:원라이너가 아닙니다!
cmd /c pause | out-null

(PowerShell 방식은 아니지만 훨씬 더 우아합니다.)

나무를 구합니다.한 줄기를 사용합니다.

콘솔에서 입력을 읽으려고 하는 것 같습니다.사용할 경우 를 사용합니다.

다음과 같은 솔루션cmd /c pause새 명령 인터프리터가 백그라운드에서 시작 및 실행되도록 합니다.어떤 경우에는 허용되지만, 이것은 정말 이상적이지 않습니다.

사용하는 솔루션Read-Host를 눌러야 하며 실제로는 "아무 키"가 아닙니다.

이 솔루션은 진정한 "계속하려면 아무 키나 누르기" 인터페이스를 제공하며 기본적으로 원본과 유사한 새 인터프리터를 시작하지 않습니다.pause지휘권

Write-Host "Press any key to continue..."
[void][System.Console]::ReadKey($true)

Michael Sorens의 답변 에도:

새 프로세스에서 키 읽기

Start-Process PowerShell {[void][System.Console]::ReadKey($true)} -Wait -NoNewWindow
  • 장점:모든 키를 사용할 수 있지만 Shift, Alt, Ctrl 수정자 키는 제대로 제외합니다.
  • 장점:PS-ISE에서 작동합니다.

10년 후에 나는 여기에 왔습니다.언제부터인지는 모르지만, "일시 중지"는 DOS 명령줄에서와 마찬가지로 PowerShell에서 작동합니다.

사할수있다니습을 사용하는 입니다.FlushInputBuffer 특히 의 경우 사하기용문삭입다제를 사용하기 합니다. 특히 장시간 실행되는 작업의 경우ReadKey:

Write-Host -NoNewLine 'Press any key to continue...'
$Host.UI.RawUI.FlushInputBuffer()
$Host.UI.RawUI.ReadKey('NoEcho,IncludeKeyDown') | Out-Null

키에 타이머를 추가하려면 PS 5.1에서 작동합니다.

 $i=1
 while (
                 !([Console]::KeyAvailable) -and 
                 ($i -le 10)
            ) {
           sleep 1
           Write-Host “$i..” -NoNewLine
           $i++
 }

c# $Host에 대한 KeyAvailable 메서드에 유의하십시오.UI.RawUI는 현재 수많은 PS 버전에서 PS 2 또는 3 이후에 버그가 발생하고 있습니다.

옵션 <5>의 PS-ISE용 원라이너는 Michael Sorens의 답변에 있습니다.

[Void][Windows.Forms.MessageBox]::Show("Click OK to continue.", "Script Paused")

언급URL : https://stackoverflow.com/questions/3963100/how-do-you-do-a-pause-with-powershell-2-0

반응형