出力をファイルにリダイレクトしたいPowerShellスクリプトがあります。問題は、このスクリプトの呼び出し方法を変更できないことです。だから私はできません:
.\MyScript.ps1 > output.txt
実行中にPowerShellスクリプトの出力をリダイレクトする方法を教えてください。
たぶん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"
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
つかいます:
Write "Stuff to write" | Out-File Outputfile.txt -Append
あなたの状況がそれを可能にする場合、1つの可能な解決策:
次のような新しいMyScript.ps1を作成します。
。\ TheRealMyScript.ps1> output.txt
私はあなたがMyScript.ps1
を修正できると思います。それを次のように変更してみてください。
$(
Here is your current script
) *>&1 > output.txt
私はちょうどPowerShell 3でこれを試しました。 Nathan Hartleyの答え のように、すべてのリダイレクトオプションを使用できます。
コマンドレット のティーオブジェクト を見てください。あなたはTeeに出力をパイプで送ることができます、そしてそれはパイプラインとまたファイルに書くでしょう
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でテストしています。
スクリプト自体に組み込まずにコマンドラインから実行したい場合は、次のようにします。
.\myscript.ps1 | Out-File c:\output.csv
これをスクリプトに埋め込むには、次のようにします。
Write-Output $server.name | Out-File '(Your Path)\Servers.txt' -Append
これでうまくいくはずです。