programing

실행 중 PowerShell 출력을 파일로 리디렉션하는 방법

muds 2023. 4. 21. 21:34
반응형

실행 중 PowerShell 출력을 파일로 리디렉션하는 방법

출력을 파일로 리디렉션하는 PowerShell 스크립트가 있습니다.문제는 이 스크립트의 호출 방식을 변경할 수 없다는 것입니다.그래서 할 수 없다:

 .\MyScript.ps1 > output.txt

PowerShell 스크립트 실행 중 출력을 리디렉션하려면 어떻게 해야 합니까?

아마도요.Start-Transcript너한테 좋을 거야.이미 실행 중인 경우 먼저 중지하고, 다시 시작하고, 완료되면 중지합니다.

$ErrorActionPreference="사일런트 계속"Stop-Transcript | out-null$ErrorActionPreference = "계속"Start-Transcript 경로 C:\output.txt - 명령어# 몇 가지 일을 하다정지 문자

작업 중에 이 기능을 실행하거나 나중에 참조할 수 있도록 명령줄 세션을 저장할 수도 있습니다.

변환되지 않은 트랜스크립트를 정지하려고 할 때 오류를 완전히 억제하려면 다음 작업을 수행합니다.

$ErrorActionPreference="SilentlyContinue"
Stop-Transcript | out-null
$ErrorActionPreference = "Continue" # or "Stop"

Microsoft는 Powershell의 Connections 사이트(2012-02-15 오후 4시 40분)에서 이 문제에 대한 해결책으로 버전 3.0에서 리다이렉션을 확장했다고 발표했습니다.

In PowerShell 3.0, we've extended output redirection to include the following streams: 
 Pipeline (1) 
 Error    (2) 
 Warning  (3) 
 Verbose  (4) 
 Debug    (5)
 All      (*)

We still use the same operators
 >    Redirect to a file and replace contents
 >>   Redirect to a file and append to existing content
 >&1  Merge with pipeline output

자세한 내용과 예는 "about_Redirection" 도움말 문서를 참조하십시오.

help about_Redirection

용도:

Write "Stuff to write" | Out-File Outputfile.txt -Append

당신이 수정할 수 있다고 생각합니다.MyScript.ps1그런 다음 다음과 같이 변경해 보십시오.

$(
    Here is your current script
) *>&1 > output.txt

방금 PowerShell 3에서 시도했습니다.Nathan Hartley의 답변과 같이 모든 리디렉션 옵션을 사용할 수 있습니다.

powershell ".\MyScript.ps1" > test.log

모든 출력을 파일로 직접 리디렉션하려면*>>:

# You'll receive standard output for the first command, and an error from the second command.
mkdir c:\temp -force *>> c:\my.log ;
mkdir c:\temp *>> c:\my.log ;

이 파일은 파일로 직접 리디렉션되므로 콘솔에 출력되지 않습니다(대부분 도움이 됩니다).콘솔 출력을 원하는 경우, 모든 출력을*&>1, 그리고 파이프로 연결합니다.Tee-Object:

mkdir c:\temp -force *>&1 | Tee-Object -Append -FilePath c:\my.log ;
mkdir c:\temp *>&1 | Tee-Object -Append -FilePath c:\my.log ;

# Shorter aliased version
mkdir c:\temp *>&1 | tee -Append c:\my.log ;

이러한 기술은 PowerShell 3.0 이상에서 지원되는 것으로 알고 있습니다. PowerShell 5.0에서 테스트 중입니다.

상황이 허락하는 한 가지 가능한 해결책:

  1. MyScript.ps1의 이름을 TheRealMyScript.ps1로 변경합니다.
  2. 다음과 같은 새로운 MyScript.ps1을 만듭니다.

    .\RealMyScript.ps1 > 출력.txt

cmdlet Tee-Object를 살펴보는 것이 좋습니다.출력을 Tee에 파이프로 연결하여 파이프라인과 파일에 쓸 수 있습니다.

스크립트 자체에 짜넣지 않고 명령줄에서 실행할 경우 다음 명령을 사용합니다.

.\myscript.ps1 | Out-File c:\output.csv

이것을 스크립트에 짜넣으려면 , 다음과 같이 실시합니다.

        Write-Output $server.name | Out-File '(Your Path)\Servers.txt' -Append

그것이 효과가 있어야 해요.

언급URL : https://stackoverflow.com/questions/1215260/how-to-redirect-the-output-of-a-powershell-to-a-file-during-its-execution

반응형