Powershell - 트랩에 전체 오류 정보를 복사하는 방법

Powershell - 트랩에 전체 오류 정보를 복사하는 방법

오류가 있을 때 전체 오류 정보를 출력하고 오류에 응답해야 하기 때문에 Powershell의 트랩 기능을 사용하고 있습니다. 트랩을 사용하지 않으면 Powershell은 오류가 발생할 때까지(그리고 내가 응답한 모든 문의 프롬프트) 오류 정보를 표시하지 않습니다.

트랩 기능을 사용할 때의 문제점은 를 사용하여 전체 정보를 인쇄할 수 있지만 $error[0]이를 문자열에 복사하여 전체 정보를 얻는 방법을 알 수 없다는 것입니다. 대신 간략한 정보만 얻습니다.

예를 들어 다음은 전체 정보를 보여줍니다.

$ErrorActionPreference = "Stop"
trap {$error[0]; Read-Host -Prompt "Trapped. Press Enter to exit"}
Split-Path -BAD
echo "Running script"
Read-Host -Prompt "Press Enter to exit"

Split-Path : A parameter cannot be found that matches parameter name 'BAD'.
At line:3 char:12
+ Split-Path -BAD
+            ~~~~
    + CategoryInfo          : InvalidArgument: (:) [Split-Path], ParameterBindingException
    + FullyQualifiedErrorId : NamedParameterNotFound,Microsoft.PowerShell.Commands.SplitPathCo 
   mmand

Trapped. Press Enter to exit: 

Split-Path : A parameter cannot be found that matches parameter name 'BAD'.
At line:3 char:12
+ Split-Path -BAD
+            ~~~~
    + CategoryInfo          : InvalidArgument: (:) [Split-Path], ParentContainsErrorRecordExce 
   ption
    + FullyQualifiedErrorId : NamedParameterNotFound,Microsoft.PowerShell.Commands.SplitPathCo 
   mmand

하지만 Write-Host에서 $error[0]을 사용하려고 하면 간단한 오류 정보만 표시됩니다.

$ErrorActionPreference = "Stop"
trap {Write-Host -ForegroundColor Red -BackgroundColor Black "$($error[0])"; Read-Host -Prompt "Trapped. Press Enter to exit"}
Split-Path -BAD
echo "Running script"
Read-Host -Prompt "Press Enter to exit"

A parameter cannot be found that matches parameter name 'BAD'.
Trapped. Press Enter to exit: 

Split-Path : A parameter cannot be found that matches parameter name 'BAD'.
At line:3 char:12
+ Split-Path -BAD
+            ~~~~
    + CategoryInfo          : InvalidArgument: (:) [Split-Path], ParentContainsErrorRecordExce 
   ption
    + FullyQualifiedErrorId : NamedParameterNotFound,Microsoft.PowerShell.Commands.SplitPathCo 
   mmand

트랩의 전체 오류 정보를 색상으로 표시하고 싶기 때문에 Write-Host가 필요합니다.

답변1

$Error[0]문자열 내부에서 사용하면 ToString()암시적으로 호출되어 오류 문자열만 반환합니다. Out-String전체 오류 출력을 얻으려면 다음을 사용하십시오 .

trap {
    Write-Host -ForegroundColor Red -BackgroundColor Black "$($Error[0] | Out-String)"
    Read-Host "Press enter"

}

또는 Write-Error대신 사용하십시오:

trap {
    Write-Error $Error[0]
    Read-Host "Press enter"

}

관련 정보