HOWTO · PowerShell
PowerShell 出力をテキストファイルにエクスポート
この記事では、一般的なコマンドの PowerShell 出力をテキストファイルにエクスポートする方法を示します。
このページの内容
コマンドの表示結果をテキストファイルに保存するには、Get-Process | Out-File -FilePath .\processes.txt のように、出力を Out-File にパイプで渡して保存先を指定します。PowerShell はファイルがなければ作成し、同じパスにファイルがすでにあれば内容を置き換えます。既存のテキストを残すには -Append を使います。以下の例では、必要な出力を保存して読み戻す方法と、テキストファイルとセッションのトランスクリプトを使い分ける方法を紹介します。
PowerShell の出力を Out-File でテキストファイルに保存する
Out-File はパイプラインからオブジェクトを受け取り、書式設定された表現をファイルに書き込みます。そのため、読みやすいテキストレポートを作りたい場合に便利です。この例では、メモリ上の2つのリストを比較し、差分を保存してから、そのファイルを読み込みます。入力ファイルを別途用意する必要はありません。
$reference = @('Alpha', 'Beta', 'Gamma')
$difference = @('Alpha', 'Beta', 'Delta')
$outputPath = Join-Path ([System.IO.Path]::GetTempPath()) 'compare-result.txt'
Compare-Object -ReferenceObject $reference -DifferenceObject $difference |
Out-File -FilePath $outputPath
Get-Content -Path $outputPath
Compare-Object は2つの入力コレクションを比較します。SideIndicator プロパティは、差異のある各項目がどちらのコレクションに含まれるかを示します。<= は参照側のコレクションにある項目、=> は比較側のコレクションにある項目を表します。この例で異なる値は Gamma と Delta です。Get-Content は一時パスに保存したテキストを表示します。ファイルを残しておく場所を指定するには、$outputPath を C:\Reports\compare-result.txt のような絶対パスに変更します。この例には実行結果の一覧は付属していないため、お使いの PowerShell のバージョンで実行し、書式設定された表を確認してください。
Out-File はパイプラインのオブジェクトを保持するのではなく、書式設定されたテキストを書き込みます。既定のエンコードは PowerShell のバージョンによって異なります。別のプログラムでファイルを読み込む必要がある場合は、お使いの PowerShell のバージョンでサポートされ、そのプログラムが期待するエンコードを -Encoding で指定してください。
出力をテキストファイルに追記する
既定では、すでに存在するパスに書き込むと、ファイルの内容は置き換えられます。現在のテキストを残してコマンドの新しい出力を末尾に追加するには、-Append を指定します。たとえば、Get-Date | Out-File -FilePath .\log.txt -Append は log.txt に日付の行を追記します。新しいレポートを作成する場合は -Append を省略してください。複数のコマンドの出力を同じファイルに書き込む場合は、テキストの一貫性を保つため、毎回同じエンコードを使います。
Out-File と PowerShell のトランスクリプトを使い分ける
1つのコマンドの出力を指定したファイルに保存したい場合や、スクリプトで目的を絞ったテキストレポートを作成したい場合は、Out-File を使います。実行のたびにレポートを置き換えることも、-Append で追記することもできます。Out-File が書き込むのは書式設定されたテキストです。次の処理で人が読むための一覧ではなく構造化データが必要なら、別のエクスポートコマンドを選んでください。
コマンドとその表示結果を含む、より広い対話型セッションの記録が必要な場合は、Start-Transcript と Stop-Transcript を使います。記録したい作業を始める前にトランスクリプトを開始し、終了後に停止します。保存先は Start-Transcript -Path で指定します。トランスクリプトには特定のコマンドの出力より多くのセッション情報が含まれることがあります。特定の結果だけを保存するなら Out-File を、セッションを記録するならトランスクリプトを使います。