PowerShell 스크립트 종료
함수 내에서 복구할 수 없는 오류가 발생했을 때 PowerShell(PS1) 스크립트를 종료하는 방법을 찾고 있습니다.예를 들어 다음과 같습니다.
function foo() {
# Do stuff that causes an error
$host.Exit()
}
그런 건 $host.Exit()있어$host.SetShouldExit()하지만 콘솔창이 닫힙니다.원하는 창이 아닙니다.내가 필요한 것은 파이썬의 것과 같은 것이다.sys.exit()현재 스크립트의 실행을 정지합니다.
편집: 네, 그냥exit.
오래된 투고라는 것은 알지만, 이 토픽을 검색할 때 상위 검색 결과 중 하나이기 때문에 이 스레드로 자주 돌아오게 됩니다.하지만, 저는 항상 정보가 서로 엇갈려서 왔을 때 보다 더 혼란스러웠습니다.궁극적으로, 나는 그것을 알아내기 위해 항상 내 자신의 테스트를 수행해야 한다.그래서 이번에는 저의 조사 결과를 올리겠습니다.
TL;DR 대부분의 사람들이 사용하기를 원할 것입니다.Exit실행 중인 스크립트를 종료합니다.를 선언하고 , >, >, >, >, >, >, >, >, >, >를 사용할 수 있습니다.Return츠미야
종료 vs 리턴 vs 브레이크
종료: 현재 실행 중인 컨텍스트를 종료합니다.스크립트에서 이 명령을 호출하면 스크립트가 종료됩니다.셸에서 이 명령을 호출하면 셸에서 나옵니다.
함수가 Exit 명령을 호출하면 실행 중인 컨텍스트가 종료됩니다.따라서 해당 함수가 실행 중인 스크립트 내에서만 호출되는 경우 해당 스크립트는 종료됩니다.할 수 는 셸이 " ", "을 이기 때문입니다.
Exit명령어가 실행 중입니다.주의: 기본적으로는 스크립트를 마우스 오른쪽 버튼으로 클릭하여 PowerShell에서 실행하면 스크립트 실행이 완료되면 PowerShell이 자동으로 종료됩니다.이것은, 이 에러와는 관계가 없습니다.
Exit명령어 또는 스크립트에 있는 다른 명령어.이 특정 스크립트 실행 방법을 사용하여 실행되는 스크립트의 기본 PowerShell 동작일 뿐입니다.배치 파일 및 명령줄 창도 마찬가지입니다.Return: 이전 콜 포인트로 돌아갑니다.스크립트(함수 외)에서 이 명령을 호출하면 셸로 돌아갑니다.이 명령어를 셸에서 호출하면 셸로 돌아갑니다(이것은 셸에서 실행되는 단일 명령어의 이전 콜포인트입니다).함수에서 이 명령을 호출하면 함수가 호출된 위치로 돌아갑니다.
반환된 콜 포인트 이후의 명령어 실행은 그 시점부터 계속됩니다.에 " " " 가 되어
Return가 어떤 되지 않은 에 의해, 「커맨드는 없어집니다.」가 .Return으로 이와Exit.Break: 루프와 스위치케이스에서 분리됩니다.루프 또는 스위치 케이스가 아닌 상태에서 이 명령을 호출하면 스크립트에서 분리됩니다.전화하시면
Break루프 내에 네스트된 루프 내에서는 호출된 루프만 분리됩니다.의 흥미로운 특징도 있습니다.
Break수 .Break명령어는 라벨이 붙은 루프 내의 여러 중첩된 그룹 내에서 호출됩니다.While ($true) { # Code here will run :myLabel While ($true) { # Code here will run While ($true) { # Code here will run While ($true) { # Code here will run Break myLabel # Code here will not run } # Code here will not run } # Code here will not run } # Code here will run }
키워드를 사용해야 합니다.
ExitPowerShell power power power 。만을 「는, 「브레이크」를 사용해 .Break
If ($Breakout -eq $true)
{
Write-Host "Break Out!"
Break
}
ElseIf ($Breakout -eq $false)
{
Write-Host "No Breakout for you!"
}
Else
{
Write-Host "Breakout wasn't defined..."
}
Write-Error는 종료되지 않은 오류에 대한 것이며 throw는 오류 종료에 대한 것입니다.
Write-Error cmdlet이 종료되지 않은 오류를 선언합니다.기본적으로 오류 스트림에서 출력과 함께 표시되는 호스트 프로그램으로 오류가 전송됩니다.
종료되지 않은 오류는 오류 스트림에 오류를 기록하지만 명령어 처리를 중지하지는 않습니다.입력 항목 집합의 한 항목에서 종료되지 않는 오류가 선언된 경우 명령은 컬렉션의 다른 항목을 계속 처리합니다.
종료 오류를 선언하려면 Throw 키워드를 사용합니다.상세한 것에 대하여는, 을 참조해 주세요.던지기(http://go.microsoft.com/fwlink/?LinkID=http153)
이 프로세스를 종료하고 기본 운영 체제에 지정된 종료 코드를 제공합니다.
https://msdn.microsoft.com/en-us/library/system.environment.exit%28v=vs.110%29.aspx
[Environment]::Exit(1)
이것에 의해, 특정의 종료 코드로 종료할 수 있습니다.이 코드는 발신자로부터 픽업할 수 있습니다.
에러 원인을 명확하게 하고 싶은 경우는, 특히 예외를 두는 것이 좋습니다.
throw "Error Message"
이로 인해 종료 오류가 발생합니다.
은 ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ReturnBreak블록으로부터의 브레이크는 일반적으로 루프에 사용되며 가장 안쪽 코드 블록에서 브레이크만 발생합니다.반환하다
된 은 ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★.Break <UnknownLabel>를 들어 단순(단순히)Break Script(라벨이 존재하지 않는 경우)는 (함수 내에서도) 스크립트 전체를 분리하여 호스트를 존속시키는 것처럼 보입니다.
이렇게 하면 현재 범위를 파악하지 않고(및 라벨을 작성하지 않고) 임의의 장소에서 스크립트를 중단하는 함수(재귀 루프 등)를 만들 수 있습니다.
Function Quit($Text) {
Write-Host "Quiting because: " $Text
Break Script
}
아마도 "트랩"을 사용하는 것이 더 나을 것이다.PowerShell 트랩은 종료 또는 오류가 발생할 때 실행할 코드 블록을 지정합니다.유형
Get-Help about_trap
트랩 스테이트먼트에 대한 자세한 내용을 참조해 주세요.
나는 이것을 프로그램 재방송에 사용했다.도움이 될지는 모르겠지만, 두 개의 다른 항목만 입력하면 되는 간단한 if 스테이트먼트입니다.파워셸에서 효과가 있었어
$rerun = Read-Host "Rerun report (y/n)?"
if($rerun -eq "y") { Show-MemoryReport }
if($rerun -eq "n") { Exit }
이게 도움이 될지는 모르겠지만 프로그램을 실행한 후에 종료하는 것과 비슷할 것 같습니다.그러나 이 경우 정의된 모든 입력에는 나열되고 분류된 출력이 필요합니다.또한 종료 시 새로운 프롬프트 행을 호출하여 프로그램을 종료할 수도 있습니다.
스크립트를 에러 없이 종료할 수 있는 기능을 원했을 때, 그 기능을 사용할 경우에는 콘솔을 종료하지 않는 간단한 트릭을 생각해 냈습니다.은 '오빠'와 되어 있습니다.$MyInvocation.ScriptName스크립트 실행 시에만 정의되는 자동 변수.
if($MyInvocation.ScriptName){exit}
언급URL : https://stackoverflow.com/questions/2022326/terminating-a-script-in-powershell
'programing' 카테고리의 다른 글
| 콘솔에서 Rails SQL 로깅 사용 안 함 (0) | 2023.04.13 |
|---|---|
| UIImageView 이미지 변경 시 페이드/해체 (0) | 2023.04.13 |
| 같은 프로젝트에서 C#과 VB의 혼재 (0) | 2023.04.08 |
| PowerShell의 3진 연산자 (0) | 2023.04.08 |
| PowerShell 모듈이 장착되어 있는지 확인하는 방법 (0) | 2023.04.08 |