PowerShellの出力をOut-Fileを使ってファイルにリダイレクトする:完全ガイド

もしPowerShellのコマンドレットで、出力をテキストファイルに保存する方法をお探しであれば、運が良いですね。PowerShellのOut-Fileコマンドレットと、その人気のあるOut-File -Appendパラメータの使い方を学ぶことになります!

Out-Fileの動作はどのようになっていますか?

このPowerShellのコマンドレットは単純で、その唯一の目的は受信した出力を保存してテキストファイルに保存することです。

標準出力リダイレクト演算子(>)を置き換えるために設計されました。 DOS時代から、出力をファイルにリダイレクトすることができました。このコマンドレットはそれを行うPowerShellの方法です。

通常、Out-FileコマンドレットはPowerShellパイプラインの最後に使用されます。その唯一の目的は生の出力を直接テキストファイルに送信することです。出力が書き込まれる方法を微調整する方法はほとんどありません。

ファイルへの出力の送信

コンピューター上のすべてのWindowsサービスのリストを返すスクリプトがあるとします。 Get-Serviceを実行すると、コンソールで予想されるすべてのオブジェクトが返されます。

しかし、その出力をテキストファイルに保存したい場合があるかもしれません。 Out-Fileコマンドレットはそれを行う素晴らしい方法です。パイプラインを介してほとんど何でもそれに渡して使用することができます。

以下に、Get-Serviceの出力が送られ、その出力を含むServices.txtという名前のテキストファイルが作成されました。このファイルには、コンソールで表示されているものとまったく同じ表示が含まれています。

PS> Get-Service | Out-File -FilePath C:\Services.txt
PS> Get-Content C:\Services.txt
Status   Name               DisplayName

Stopped  AJRouter           AllJoyn Router Service
Stopped  ALG                Application Layer Gateway Service
Stopped  AppIDSvc           Application Identity
Stopped  Appinfo            Application Information
Stopped  AppMgmt            Application Management
<SNIP>

ファイルへの追加

デフォルトでは、FilePathパラメーターで指定されたテキストファイル内のすべてを上書きします。しかし、Appendパラメーターを使用することで、この動作をオーバーライドすることができます。

もしかしたら、コンソール出力をファイルに蓄積し、上書きするのではなくファイルにテキストを追加したい場合があります。その場合は、Appendパラメーターが役立ちます。

Out-File -Appendパラメーターを使用すると、以下のようになります。Appendパラメーターを使用しないと、C:\File.txtが上書きされることに注意してください。しかし、Appendパラメーターを追加すると、出力が末尾に追加されます。

PS> 'foo' | Out-File -FilePath C:\File.txt
PS> Get-Content -Path C:\File.txt
foo
PS> 'foo' | Out-File -FilePath C:\File.txt
PS> Get-Content C:\File.txt
foo
PS> 'foo' | Out-File -FilePath C:\File.txt -Append
PS> Get-Content C:\File.txt
foo foo

出力の変更

デフォルトでは、このコマンドレットはコンソールに表示される内容を再現しようとしますが、操作する方法もあります。たとえば、コマンドレットにはNoNewLineパラメーターがあり、すべての改行文字を単に削除します。

PS> Get-Service | Out-File -FilePath C:\Services.txt -NoNewline
PS> Get-Content C:\Services.txt
Status   Name               DisplayName
------   ----               -----------
Stopped  AJRouter           AllJoyn Router Service
Stopped  ALG                Application La

あるいは、Widthパラメーターを使用して、各行のテキストを特定の文字数で切り取ることもできます。

PS> Get-Service | Out-File -FilePath C:\Services.txt -Width 30 
PS> Get-Content C:\Services.txt
Status   Name               DisplayName
------   -----              -----------
Stopped  AJRouter           Al

結論

Out-File

現実のシナリオでは、このコマンドレットは動作しますが、出力をファイルに保存するためのより良い方法があります。

このコマンドレットは、出力を操作するための実質的なオプションを提供しません。単に、コンソールに表示されている内容をそのまま出力します。このコマンドレットは、すべてを直接テキストファイルに書き込むPowerShellトランスクリプトと似ています。

Add-ContentまたはSet-Contentコマンドレットは常に柔軟性がありますが、PowerShellの出力をファイルにすばやく取得する必要がある場合は、Out-Fileが適しています。

関連: Set-Content: ファイルへの書き込みのPowerShell方法

Source:
https://adamtheautomator.com/out-file/