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

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

 .\MyScript.ps1 > output.txt

PowerShell 스크립트가 실행되는 동안 출력을 어떻게 리디렉션합니까?



답변

아마도 Start-Transcript당신을 위해 일할 것입니다. 이미 실행 중이면 중지 한 다음 시작하고 완료되면 중지하십시오.

$ ErrorActionPreference = "SilentlyContinue"
정지 대본 | 널이 아닌
$ ErrorActionPreference = "계속"
시작 스크립트-경로 C : \ output.txt-추가
# 몇 가지 일을
정지 대본

또한 작업하는 동안 이것을 실행하고 나중에 참조 할 수 있도록 명령 행 세션을 저장하도록 할 수 있습니다.

복사하지 않은 대화 내용을 중지하려고 할 때 오류를 완전히 억제하려면 다음을 수행하십시오.

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


답변

Microsoft는 Powershell의 Connections 웹 사이트 (2012-02-15 (4:40 PM)) 에서 버전 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의 답변 에서와 같이 모든 리디렉션 옵션을 사용할 수 있습니다 .


답변

상황에 따라 허용되는 한 가지 해결책 :

  1. MyScript.ps1의 이름을 TheRealMyScript.ps1로 바꿉니다.
  2. 다음과 같은 새 MyScript.ps1을 만듭니다.

    . \ TheRealMyScript.ps1> output.txt


답변

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


답변

cmdlet Tee-Object를 살펴볼 수 있습니다 . 출력을 Tee로 파이프 할 수 있으며 파이프 라인과 파일에도 쓰게됩니다.