web-dev-qa-db-ja.com

実行中にPowerShellの出力をファイルにリダイレクトする方法

出力をファイルにリダイレクトしたいPowerShellスクリプトがあります。問題は、このスクリプトの呼び出し方法を変更できないことです。だから私はできません:

 .\MyScript.ps1 > output.txt

実行中にPowerShellスクリプトの出力をリダイレクトする方法を教えてください。

177
Martin

たぶんStart-Transcriptはあなたのために働くでしょう。すでに実行中の場合はまず停止してから起動し、完了したら停止します。

 $ ErrorActionPreference = "SilentlyContinue" 
ストップトランスクリプト| out-null 
 $ ErrorActionPreference = "Continue" 
 Start-Transcript -path C:\ output.txt -append 
#いくつかの操作を行います
 Stop-Transcript [ ]

作業中にこれを実行して、後で参照できるようにコマンドラインセッションを保存することもできます。

転写していないトランスクリプトを停止しようとしたときにエラーを完全に抑制したい場合は、次のようにします。

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

Microsoftは、PowershellのConnections Webサイト(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
44
Nathan Hartley

つかいます:

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

あなたの状況がそれを可能にする場合、1つの可能な解決策:

  1. MyScript.ps1をTheRealMyScript.ps1に変更します。
  2. 次のような新しいMyScript.ps1を作成します。

    。\ TheRealMyScript.ps1> output.txt

24
zdan

私はあなたがMyScript.ps1を修正できると思います。それを次のように変更してみてください。

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

私はちょうどPowerShell 3でこれを試しました。 Nathan Hartleyの答え のように、すべてのリダイレクトオプションを使用できます。

21
Michael Lemke

コマンドレット のティーオブジェクト を見てください。あなたはTeeに出力をパイプで送ることができます、そしてそれはパイプラインとまたファイルに書くでしょう

17
Andy Schneider
powershell ".\MyScript.ps1" > test.log
11
suiwenfeng

すべての出力をファイルに直接リダイレクトしたい場合は、*>>を使用してみてください。

# 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でテストしています。

7
sonjz

スクリプト自体に組み込まずにコマンドラインから実行したい場合は、次のようにします。

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

これをスクリプトに埋め込むには、次のようにします。

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

これでうまくいくはずです。

0
bbcompent1