증상
git 같은 네이티브 실행 파일이 정상 종료(exit 0)했는데 $?가 false이고, git의 평범한 진행 메시지가 빨간 에러로 쏟아진다.
원인
PS 5.1은 네이티브 exe의 stderr에 2>&1을 걸면 각 줄을 ErrorRecord로 포장한다. stderr에 뭔가 썼다는 사실만으로 실패 취급이 된다. 많은 CLI가 정상 진행 상황을 stderr로 보낸다.
해법
네이티브 명령에 2>&1을 걸지 않는다. 출력을 삼켜야 하면 감싼다.
try { & $exe @args 2>&1 | Out-Null } catch { }
검증
$LASTEXITCODE를 본다. 네이티브 명령의 성패는 $?가 아니라 이 값이다.