programing

텍스트 파일 및 콘솔에 오류 및 출력 쓰기

goodsources 2023. 9. 13. 22:34
반응형

텍스트 파일 및 콘솔에 오류 및 출력 쓰기

실행 스크립트의 전체 출력(오류 포함)을 콘솔과 파일에 동시에 작성하려고 합니다.몇 가지 다양한 옵션을 시도해 보았습니다.

.\MyScript.ps1 | tee -filePath C:\results.txt # only the output to the file
.\MyScript.ps1 2> C:\results.txt # only the errors to the file and not the console
.\MyScript.ps1 > C:\results.txt # only the output to the file and not the console 

저의 희망은 파일을 사용하여 출력/오류를 검토하는 것이었습니다.

편집:

이것이 제 현재 시험 대본입니다.원하는 결과는 세 개의 메시지를 모두 볼 수 있다는 것입니다.

function Test-Error 
{
    echo "echo"
    Write-Warning "warning"
    Write-Error "error"       
}

Test-Error 2>&1 | tee -filePath c:\results.txt

시도해 보셨습니까?

 .\MyScript.ps1 2>&1 | tee -filePath c:\results.txt

2>&1당신이 찾고 있는 건

참고: 이 답변은 PowerShell 1.0 및 2.0에서는 잘 작동하지만, PowerShell 3.0 이상에서는 표준 출력과 오류만 파악합니다.

어떤 답변도 만족스럽지 못해서 몇 가지를 섞어서 생각해냈습니다(PowerShell 3.0+).

$output = try{your_command *>&1}catch{$_}

이를 통해 사용을 시도하여 발생하는 모든 오류 및 출력을 캡처할 수 있습니다.your_command.

존재하지 않는 명령을 사용할 때는 예외를 잡습니다.

PS C:\Users\jdgregson> $output = try{your_command *>&1}catch{$_}
PS C:\Users\jdgregson> echo $output
your_command : The term 'your_command' is not recognized as the name of a
cmdlet, function, script file, or operable program. Check the spelling of the
name, or if a path was included, verify that the path is correct and try again.
At line:1 char:15
+ $output = try{your_command 2>&1}catch{$_}
+               ~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (your_command:String) [], Comman
   dNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException

PS C:\Users\jdgregson>

잘못된 인수를 기존 명령에 전달할 때 예외를 잡습니다.

PS C:\Users\jdgregson> $output = try{cat C:\invalid-path.txt *>&1}catch{$_}
PS C:\Users\jdgregson> echo $output
cat : Cannot find path 'C:\invalid-path.txt' because it does not exist.
At line:1 char:15
+ $output = try{cat C:\invalid-path.txt 2>&1}catch{$_}
+               ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (C:\invalid-path.txt:String) [Ge
   t-Content], ItemNotFoundException
    + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetCo
   ntentCommand

명령에 전혀 문제가 없는 경우 출력이 잡힙니다.

PS C:\Users\jdgregson> $output = try{cat C:\valid-path.txt *>&1}catch{$_}
PS C:\Users\jdgregson> echo $output
this file is really here

예를 들어, 다음과 같이 사용할 수 있습니다.

PS C:\Users\jdgregson> $output = try{Test-Error *>&1}catch{$_}
PS C:\Users\jdgregson> echo $output
echo
WARNING: warning
Test-Error : error
At line:1 char:15
+ $output = try{Test-Error *>&1}catch{$_}
+               ~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [Write-Error], WriteErrorExcep
   tion
    + FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorExceptio
   n,Test-Error

기본적으로 데이터의 성공 스트림만 출력 파일로 전달됩니다.오류 및 경고를 지시하려면 다음과 같은 내용을 추가해야 합니다.

당신의 스크립트 3>&12>&1 | Out-file log.txt

Powershell redirection operators.

저는 같은 파일에서 오류와 결과를 둘 다 얻을 수 없었습니다.내게 도움이 된 해결책:

.\MyScript.ps1 2> C:\errors.txt | tee -filePath C:\results.txt

업데이트: 작업을 더 진행했고 사용했습니다.Start-Transcript그리고.Stop-Transcript내 모드에서 모든 것을 포착할 수 있었고 효과가 있었습니다!

언급URL : https://stackoverflow.com/questions/3008545/writing-errors-and-output-to-a-text-file-and-console

반응형