3

Get-Content コマンドレットを括弧で囲むと、どのような影響がありますか? 括弧を使用して同じファイルを読み書きできるのに、括弧なしではできないのはなぜですか?

問題のコードの例を次に示します。

powershell -command "(Get-Content SomeFile.sql) | ForEach-Object { $_ -replace \"BEFORE\", \"AFTER\" } | Set-Content SomeFile.sql"

Get-Content コマンドレットは、既定でコマンド全体が実行されるまでファイル ハンドルを保持していますか?

4

2 に答える 2

5

ファイル ハンドルを保持している Get-Content コマンドレット

はい。

Get-Content括弧がないと、パイプラインは1 つのオブジェクト (つまり、ファイルからの 1 行のテキスト) を出力するたびに実行されます。

一方、括弧Get-Contentを使用すると、完了まで実行され、ファイル全体の文字列の配列が作成され、次にパイプラインが各行で実行されます。

したがって、前者の場合、ファイルは開いたままになりますが、2 番目の場合、ファイル全体がメモリに読み込まれます。

于 2013-03-13T15:53:16.173 に答える
0

括弧がないと、Get-Content は読み取り用にファイルを開きますが、同時に実際には同じファイルに書き込もうとします。

括弧は、次のステージに進む前に読み取り操作を強制的に完了させ、コンテンツをパイプラインに渡します。

于 2013-03-13T16:06:14.247 に答える