同じようなファイルへの出力を行う3つのコマンドレットの違いについて以下に記します。
Out-File | Set-Content |
Out-File -Append | Add-Content |
PowerShellでスクリプトを作成し実行したとき、スクリプトが実行ログを出力しているとしましょう。
なんと、Set-Content, Add-Contentコマンドレットは、Readロックをかけてしまうのです。
したがって、スクリプトが動作しておりログファイルにアクセス中と場合、メモ帳などでログを閲覧しようとするとエラーとなってしまうのです。
以下にテストした例を記します。
PS C:\Users\Sakura\Desktop> "Hello", "world" | % { $_; Start-Sleep 10 } | Add-Content Hello.txt
HelloをAdd-Contentで出力して、その後10秒待った後、worldをファイルに出力するだけの簡単なスクリプトです。
この1ラインスクリプトを起動したあと、10秒以内に作成されたファイルをメモ帳で開くと以下のように「プロセスはファイルにアクセスできません。別プロセスが使用中です。」とメッセージが表示されました。
これからわかるように、Set-Content, Add-Contentはリードロックがかかっているのが確認できます。
したがって、ログを出力しながらテキストエディタで閲覧するような事がある場合は、Out-File/Out-File -Appendの使用をお勧めします。
以上、Out-FileとSet-Content/Add-Contentの違いについてでした。