このエントリーをはてなブックマークに追加


Out-FileとSet-Content/Add-Contentの違いについて

同じようなファイルへの出力を行う3つのコマンドレットの違いについて以下に記します。

Out-FileSet-Content
Out-File -AppendAdd-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秒以内に作成されたファイルをメモ帳で開くと以下のように「プロセスはファイルにアクセスできません。別プロセスが使用中です。」とメッセージが表示されました。

01.png
 

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

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


添付ファイル: file01.png 815件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2016-01-22 (金) 23:15:01