programing

파워셸에 오류가 있을 때 오류 코드를 얻는 방법은 무엇입니까?

bestprogram 2023. 8. 25. 23:48

파워셸에 오류가 있을 때 오류 코드를 얻는 방법은 무엇입니까?

제 스니펫은 다음과 같습니다.

$msg=Remove-Item -Recurse -Force C:\users\bkp  2>&1
if ($LASTEXITCODE -eq 1)
{
  "Encountered error during Deleting the Folder. Error Message is $msg. Please check." >> $LogFile
  exit
 }

C:\users\bkp 폴더가 없습니다.$msg가 $LASTX 오류 메시지를 표시함에도 불구하고ITCODE는 여전히 0입니다.플래그로 캡처하려면 어떻게 해야 합니까?

사용할 수 있습니다.$? 마지막 명령의 결과를 결정하는 자동 변수입니다.실제 오류에 대한 액세스가 필요한 경우 다음을 사용할 수 있습니다.$Error자동 변수배열의 첫 번째 항목은 마지막으로 발생한 오류입니다.

Remove-Item -Recurse -Force C:\users\bkp 2>&1
if( -not $? )
{
    $msg = $Error[0].Exception.Message
    "Encountered error during Deleting the Folder. Error Message is $msg. Please check." >> $LogFile
    exit
}

$LASTEXITCODE는 명령행 프로그램이 상태를 반환하는 것을 엄격히 의미합니다.Remove-item과 같이 PS에 내장된 Cmdlet은 최대 3가지 방법으로 오류를 반환합니다.경고의 경우 메시지(또는 기타)를 작성합니다.NET 객체)를 "경고 스트림"으로 이동합니다.PSv3에서는 해당 스트림을 파일로 리디렉션하는 간단한 방법이 있습니다.cmdlet blah blah blah 3>warning.out두 번째는 오류 스트림을 통해 발생합니다.해당 스트림도 리디렉션할 수 있습니다.... 2>error.out또는 일반적으로 오류는 try/catch 또는 트랩을 사용하여 잡히거나 -ErrorVariable 매개 변수를 사용하여 변수에 기록됩니다( 참조).help about_commonparameters) 세 번째 방법은 오류를 "던지는" 것입니다.실패하지 않는 한(시도/캐치 또는 트랩) 오류로 인해 스크립트가 종료됩니다.일반적으로 발생하는 오류는 의 하위 클래스입니다.NET 클래스system.Management.Automation.ErrorRecord오류 레코드는 반환 코드보다 오류에 대한 훨씬 더 많은 정보를 제공합니다.

파일을 찾을 수 없음 오류로 인해 제거 항목이 실패하면 다음과 같이 기록합니다.System.Management.Automation.ItemNotFoundException오류 스트림으로 이동합니다.시도/캐치를 사용하여 제거 항목에서 특정 오류 또는 기타 특정 오류를 필터링할 수 있습니다.명령줄에서 PS 명령을 입력하는 경우 입력할 수 있습니다.$error[0]|select-object *마지막 오류에 대한 많은 정보를 얻으려고 합니다.


다음과 같이 할 수 있습니다.

try {
  Remove-Item -Recurse -Force C:\users\bkp  2>&1
} catch {
  # oops remove-item failed. Write warning then quit 
  # replace the following with what you want to do
  write-warning "Remove-item encounter error: $_"
  return # script failed
}

언급URL : https://stackoverflow.com/questions/17461079/how-to-get-the-error-code-when-there-is-error-in-powershell