#navi(../)
* Out-FileとSet-Content/Add-Contentの違いについて [#k9b57df5]
同じようなファイルへの出力を行う3つのコマンドレットの違いについて以下に記します。
|Out-File|Set-Content|
|Out-File -Append|Add-Content|

#contents
#htmlinsertpcsp(win-top.html,win-sp.html)

* 関連記事 [#z37615c5]
-[[ファイル出力がBOM付き、UNICODE(UTF-16)になる場合の対処方法>PowerShell/ファイル出力がBOM付き、UNICODE(UTF-16)になる場合の対処方法]]
-[[サクラエディタのライトロックを無効にする設定方法>テキスト関連ソフト/サクラエディタのライトロックを無効にする設定方法]]

* 大きな違いはリードロックがかかってしまう [#n8cba83d]
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秒以内に作成されたファイルをメモ帳で開くと以下のように「プロセスはファイルにアクセスできません。別プロセスが使用中です。」とメッセージが表示されました。
#ref(01.png)
#br

これからわかるように、Set-Content, Add-Contentはリードロックがかかっているのが確認できます。~
したがって、ログを出力しながらテキストエディタで閲覧するような事がある場合は、Out-File/Out-File -Appendの使用をお勧めします。

以上、Out-FileとSet-Content/Add-Contentの違いについてでした。

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS