1. ホーム
  2. powershell

[解決済み] PowerShell Set-ContentとOut-File - 違いは何ですか?

2023-01-28 01:48:12

質問

PowerShellでは、以下の違いは何ですか? Out-File Set-Content ? または Add-Content そして Out-File -append ?

同じファイルに対して両方を使用すると、テキストが完全に モジベーク .

(細かい第二の質問ですが > のエイリアスです。 Out-File のことですね?)

どのように解決するのですか?

PowerShell を数ヶ月間使用し、いくつかの科学的な実験を行った結果、私が推測したことをまとめます。私はドキュメントでこのどれかを見つけることはありませんでした :(

[ 更新しました。 この多くは、現在、より良い文書化されているようです]。

読み取りと書き込みのロック

一方 Out-File が実行されている間、他のアプリケーションはログファイルを読むことができます。

一方 Set-Content が実行されている間は、他のアプリケーションはログファイルを読むことができません。そのため を使うことはありません。 Set-Content を使って、長く実行されるコマンドのログを取らないようにしてください。

エンコーディング

Out-File に保存されます。 Unicode ( UTF-16LE ) のエンコーディングがデフォルトで指定されています (指定することも可能です)、一方 Set-Content はデフォルトで ASCII ( US-ASCII ) を PowerShell 3+ で指定することができます (これも指定可能です)。それ以前のバージョンのPowerShellでは Set-Content にコンテンツを書き込んでいました。 Default (ANSI)エンコーディングで書かれています。

編集者注 : バージョン5.1時点でのPowerShell はまだ はデフォルトで文化固有の Default ("ANSI") エンコーディングになります。もしASCIIがデフォルトであれば、非ASCII文字である ü のような非ASCII文字は次のように変換されます。 リテラル ? というように、しかしそれは ではない である。 'ü' | Set-Content tmp.txt; (Get-Content tmp.txt) -eq '?' 収穫 $False .

PS > $null | out-file outed.txt
PS > $null | set-content set.txt
PS > md5sum *
f3b25701fe362ec84616a93a45ce9998 *outed.txt
d41d8cd98f00b204e9800998ecf8427e *set.txt

これは、2つのコマンドのデフォルトが互換性がなく、混在するとテキストが破損することを意味するので、常にエンコーディングを指定する。

書式設定

Bartekが説明したように Out-File はターミナルで見られるような、出力の派手な書式を保存します。つまり、2 つのファイルを含むフォルダーで、コマンド dir | out-file out.txt は11行のファイルを作成します。

ここで Set-Content はよりシンプルな表現を保存します。2つのファイルを持つこのフォルダで、コマンド dir | set-content sc.txt は2行のファイルを作成します。ターミナルでの出力をエミュレートするために

PS > dir | ForEach-Object {$_.ToString()}
out.txt
sc.txt

この書式は改行にも影響があると思うのですが、まだ説明できません。

ファイルの作成

Set-Content の場合、確実に空のファイルを作成するわけではありません。 Out-File では確実に空のファイルを作成します。

空のフォルダーでは、コマンド dir | out-file out.txt はファイルを作成しますが dir | set-content sc.txt はファイルを作成しません。

パイプライン変数

Set-Content はパイプラインからファイル名を取ります。いくつかのファイルの内容をある固定値に設定することができます。

Out-File はパイプラインからデータを取得し、1つのファイルの内容を更新します。

パラメータ

Set-Content には、以下の追加パラメータがあります。

  • 除外する
  • フィルタリング
  • 含む
  • パススルー
  • ストリーム
  • UseTransaction

Out-File には、以下の追加パラメータがあります。

  • 追加
  • ノークロッバー

これらのパラメータが何であるかについての詳細は、ヘルプを参照してください; 例えば get-help out-file -parameter append .