PowerShell에서 LastExitCode

  1. PowerShell 환경에서의 $? 사용
  2. PowerShell에서 오류 처리기로서의 $LastExitCode
  3. 결론
PowerShell에서 LastExitCode

PowerShell에서 오류 처리의 복잡성을 이해하는 것은 효과적인 스크립팅에 필수적입니다. 다양한 도구 중에서 $LastExitCode는 외부 명령의 종료 코드를 캡처하기 위한 강력한 메커니즘으로 돋보입니다.

이 기사에서는 $LastExitCode의 미묘한 사용을 다루며, 기본 오류 체크에서 동적 명령 실행에 이르기까지 다양한 시나리오에서의 적용을 탐구합니다. $LastExitCode를 마스터함으로써 PowerShell 사용자는 스크립트의 견고성과 신뢰성을 향상시킬 수 있습니다.

PowerShell 환경에서의 $? 사용

여기에서 사용하기 전에 $? 명령을 이해하는 것이 중요합니다. PowerShell에서 $?는 마지막 작업의 성공 여부를 결정하는 자동 변수로 오류 처리기로 사용될 수 있습니다.

마지막으로 실행된 명령에 따라 부울 값 True 또는 False를 반환합니다. 스크립트에서 마지막으로 실행된 명령이 성공하면 true를 반환하고, 그렇지 않으면 false를 반환합니다.

이 명령의 실행 예는 아래 실행 코드로 나타나 있습니다.

Remove-Item -Path "example.txt"
if ($?) {
    Write-Host "File removed successfully."
}
else {
    Write-Host "Failed to remove file."
}

이 예에서 우리는 먼저 example.txt라는 파일을 제거하려고 시도합니다. Remove-Item 명령을 실행한 후, if 문에서 $? 변수를 사용하여 작업이 성공했는지 확인합니다.

$?True로 평가되면 성공 메시지를 출력하고, 그렇지 않으면 실패 메시지를 출력합니다.

powershell lastexitcode - 출력 1

$lastexitcode$?는 차이가 있지만, 오류 처리에도 사용됩니다.

PowerShell에서 오류 처리기로서의 $LastExitCode

명령이 내부 명령인지 외부 명령인지에 따라 사용되는 오류 처리 방식에는 차이가 있습니다.

명령이 외부인 경우 $lastexitcode를 사용하게 됩니다. 이는 이 명령이 외부 스크립트와 명령에만 적용되기 때문입니다.

$LastExitCode의 주된 목적은 PowerShell 세션 내에서 실행된 외부 명령의 성공 또는 실패에 대한 피드백을 제공하는 것입니다. $LastExitCode에 접근함으로써 사용자는 마지막으로 실행된 명령이 성공적으로 완료되었는지 아니면 오류가 발생했는지를 판단할 수 있습니다.

예시:

# Execute an external command (ping)
ping example.test

# Check the value of $LastExitCode
$exitCode = $LastExitCode

# Output the exit code
Write-Host "Exit code: $exitCode"

이 예에서는 example.test라는 호스트에 ping을 시도합니다. ping 명령을 실행한 후, $LastExitCode의 값을 $exitCode라는 변수에 저장합니다.

마지막으로 Write-Host cmdlet을 사용하여 종료 코드를 출력합니다. 이 접근 방식은 PowerShell 스크립트 내에서 마지막 명령의 종료 코드를 직접 액세스하고 활용할 수 있게 해줍니다.

출력:

powershell lastexitcode - 출력 2

PowerShell에서 오류 처리기로서 Invoke-Expression과 함께하는 $LastExitCode

PowerShell에서 Invoke-Expression cmdlet은 문자열 변수에 저장된 명령이나 스크립트를 실행할 수 있게 해줍니다. $LastExitCode와 결합할 경우 동적으로 실행된 명령의 종료 코드를 캡처하는 방법을 제공합니다.

예시:

# Define a command as a string
$command = "ping example.test"

# Execute the command using Invoke-Expression
Invoke-Expression -Command $command

# Capture the exit code using $LastExitCode
$exitCode = $LastExitCode

# Output the exit code
Write-Host "Exit code: $exitCode"

이 예에서는 명령(ping example.test)을 문자열 변수 $command로 정의합니다. 이후 Invoke-Expression을 사용하여 $command에 저장된 명령을 실행합니다.

실행 후, $LastExitCode를 사용하여 종료 코드를 캡처하고 이것을 $exitCode라는 변수에 저장합니다. 마지막으로 종료 코드를 콘솔에 출력합니다.

출력:

powershell lastexitcode - 출력 3

이전 스크립트가 true일 경우, $LastExitCode 출력은 항상 0이 됩니다.

그러나, 실패할 경우 외부 스크립트가 반환하는 1 또는 다른 정수가 될 것입니다. 이는 $LastExitCode 명령이 $? 명령과 달리 이진적이지 않기 때문입니다.

PowerShell에서 오류 처리기로서 조건 검사를 통한 $LastExitCode

조건 문은 PowerShell 스크립트 내에서 명령의 성공 여부에 따라 결정을 내릴 수 있게 해줍니다. 이러한 문에서 $LastExitCode를 활용하여 견고한 오류 처리와 조건 논리를 구현하는 방법을 보겠습니다.

예시:

# Execute an external command (ping)
ping example.test

# Check the value of $LastExitCode
if ($LastExitCode -eq $null) {
    Write-Host "No exit code available. An external command might not have been executed."
}
else {
    Write-Host "Exit code: $LastExitCode"
}

이 예에서는 example.test라는 호스트에 ping을 시도합니다. ping 명령을 실행한 후, $LastExitCode의 값을 확인합니다.

$LastExitCode가 null일 경우, ping 명령이 실행되지 않았을 가능성이 있으며, 이는 잘못된 호스트 이름이나 네트워크 문제 때문일 수 있습니다. 그렇지 않으면 종료 코드를 출력하여 ping 명령의 성공 또는 실패에 대한 통찰을 제공합니다.

출력:

powershell lastexitcode - 출력 4

결론

이 기사는 PowerShell 스크립팅에서 $LastExitCode를 오류 처리기로 활용하는 포괄적인 개요를 제공했습니다. 우리는 $?를 통한 기본 오류 체크, $LastExitCode와 외부 명령에 대한 오류 처리, Invoke-Expression과 동적 명령 실행, 그리고 조건 검사에서의 사용을 탐구했습니다.

이 기술들을 마스터함으로써 PowerShell 사용자는 스크립팅 능력을 향상시키고, 자신의 스크립트에서 견고한 오류 감지와 처리를 보장할 수 있습니다. 이해를 더 깊이 하기 위해 오류 트랩과 특정 오류 시나리오 처리와 같은 고급 주제를 탐구하는 것을 고려해 보세요.

PowerShell에서 오류 처리 기술에 대한 확고한 grasp를 바탕으로, 다양한 자동화 작업을 위한 신뢰할 수 있고 탄력적인 스크립트를 개발할 수 있습니다.

튜토리얼이 마음에 드시나요? DelftStack을 구독하세요 YouTube에서 저희가 더 많은 고품질 비디오 가이드를 제작할 수 있도록 지원해주세요. 구독하다
Migel Hewage Nimesha avatar Migel Hewage Nimesha avatar

Nimesha is a Full-stack Software Engineer for more than five years, he loves technology, as technology has the power to solve our many problems within just a minute. He have been contributing to various projects over the last 5+ years and working with almost all the so-called 03 tiers(DB, M-Tier, and Client). Recently, he has started working with DevOps technologies such as Azure administration, Kubernetes, Terraform automation, and Bash scripting as well.