質問者
まとめてファイルに出力したい

質問
-
結果をファイルに出力したい場合、通常であればこのように書きます。
Write-Output "Hello" | Out-File "C:\filename.txt"
Write-Output "World" | Out-File "C:\filename.txt" -Append
2行程度であればこれでもいいのですが、数百行も記述があると、
1行ごとにOut-Fileを書かないといけないのは効率が悪いし、記述ミスも出てきます。
これをキレイにするために、以下のような書き方が可能であればこのようにしたいです。
"C:\filename.txt" への書き込み宣言
"C:\filename.txt" への書き込み開始(追記)
Write-Output "Hello"
Write-Output "World"
・・・
・・・
"C:\filename.txt" への書き込み終了
開始と終了の間はすべての結果がfilename.txtに書き出されます。
すべての返信
-
Takashi Shinoharaさん、回答ありがとうございます。
書いてくれたURLにアクセスしました。
今回は例題がテキスト出力だったので、これでいけるかもしれません。
ただ、私が出した例題が悪かったかもしれません。
本来やりたいことは、Write-Outputだけでなく、
hostnameやGet-Volumeなどのコマンドで
取得した結果も同じテキストに書き出したいのです。
"C:\filename.txt" への書き込み宣言
"C:\filename.txt" への書き込み開始(追記)
Write-Output "Hello"
Write-Output "World"
hostname
Get-Volume
"C:\filename.txt" への書き込み終了
-
牟田口大介さん、回答ありがとうございます。
これまで回答していただいた内容を応用した形で
シンプルにまとまりましたね。
私の要件には一番マッチしますね。
希望通りの結果が得られました。
もしこの構成から更に修正ができるのであれば、
最終行のファイル書き出し命令を、
最初の行に書けるといいですね(パイプ処理だとしょうがないところですが・・・)
さらに私が希望する動きとしては、
実行するコマンドは100個くらいあるので、
1個のコマンドを実行したら、処理結果をログに書き出す。
次のコマンドを実行したログに書き出す。
このような動きが理想です。
まとめて@(・・・)でまとめて書き出すとなるとバッファが足りなくなることが気になります。