programing

파워셸에서 우아하게 멈춘다.

newstyles 2023. 8. 12. 10:04

파워셸에서 우아하게 멈춘다.

PowerShell 스크립트에서 +를 캡처하고 C처리하는 방법은 무엇입니까?v2의 cmdlet에서 v2에 대한 재정의를 포함하여 이 작업을 수행할 수 있습니다.Powershell.Stop()메서드입니다. 스크립트에 사용할 아날로그를 찾을 수 없습니다.

현재 블록을 통해 정리를 수행하고 있지만 스크립트가 취소될 때(완료까지 실행하는 것이 아니라) 추가 작업을 수행해야 합니다.

Try-catch-finally에 대한 설명서는 다음과 같습니다.

Ctrl+C를 사용하여 스크립트를 중지하더라도 Finally 블록이 실행됩니다.종료 키워드가 캐치 블록 내에서 스크립트를 중지하는 경우에도 Finally 블록이 실행됩니다.

다음 예를 참조하십시오.실행하고 를 눌러 취소합니다.ctrl-c.

try
{
    while($true)
    {
        "Working.."
        Start-Sleep -Seconds 1
    }
}
finally
{
    write-host "Ended work."
}

여기에 설명된 방법을 PoshCode에서 사용할 수 있습니다.

요약:.

세트

[console]::TreatControlCAsInput = $true

그런 다음 사용자 입력을 위해 폴링합니다.

if($Host.UI.RawUI.KeyAvailable -and (3 -eq  
    [int]$Host.UI.RawUI.ReadKey("AllowCtrlC,IncludeKeyUp,NoEcho").Character))

또한 다음이 있습니다.Stopping에 대한 재산.$PSCmdlet여기에 사용할 수 있습니다.

여기 최근에 작동하는 해결책이 있습니다.실행 중단(파일 핸들 닫기)을 제어해야 하는 루프에서 if 부분을 사용합니다.

    [Console]::TreatControlCAsInput = $true # at beginning of script

    if ([Console]::KeyAvailable){

        $readkey = [Console]::ReadKey($true)

        if ($readkey.Modifiers -eq "Control" -and $readkey.Key -eq "C"){                
            # tasks before exit here...
            return
        }

    }

또한 스크립트를 시작할 때 KeyAvailable이 참이 되도록 하는 버그가 있습니다.시작할 때 ReadKey를 한 번 불러옴으로써 완화할 수 있습니다.이 접근 방식에는 필요하지 않으며, 이러한 맥락에서 알 가치가 있습니다.

언급URL : https://stackoverflow.com/questions/1710698/gracefully-stopping-in-powershell