cmdlet Write-Error
을 호출하는 간단한 로그 함수를 코딩했습니다. 그러나 이로 인해 예기치 않은 동작이 발생합니다.PowerShell 쓰기 오류
function foo {
Param([string]$Msg = "This is an error")
Write-Error $Msg
}
는 다음 foo
결과를 호출 : 당신에게 예를 제공하기 위해 그래서
foo: This is an error At line:1 char:1 + foo
를, foo
를 호출 (과하면 cmdlet을 거기에 Write-Error
가)에서 오류가 발생 것 같다 그에게 PS 링크 기능 foo
자체.
PS 오류 스트림에 메시지를 쓰는 올바른 방법은 무엇입니까?하지만 호출 기능에서 오류처럼 보이지는 않습니까?
답변을 찾았습니다. 차이점은 약간 미묘합니다 : 오류를 던지고 오류 메시지를 표준 오류 스트림으로 출력하는 것과는 차이가 있습니다. try/catch 구조에서 오류가 발생하면 catch 블록으로 건너 뜁니다. try 블록에서 write-error
을 사용하는 동안 출력을 표준 오류 스트림으로 파이프합니다. 다음 함수는 catch 블록으로 들어 가지 않습니다. 그러나 $ error 변수에 "Hey"라는 오류 메시지를 기록하고 다른 모든 속성은 비워 둡니다.
function myErr { try { write-error "Hey" } catch { write-host "Ups" } }
오류 메시지는, 그러나, 오류가 1 호선, 1
그래서 좋아, 내가 write-error
를 호출 할 때이 표준 행동 것 같다 참조 문자에 myErr
발생한 것을 보여줍니다. 그러면 write-output
을 사용합니다. 대신이의
Ehhh,이 오류는 기능에 의해 발생했는데 왜 오류 출력 상태가되지 않습니까? –
오류 처리를 위해 try/catch 구조를 사용해보십시오. –
이것이 바로'Write-Error'가 작동하는 방식입니다. 원하지 않는다면'Write-Output'을 사용하십시오. –