このページを検索で見つけた人はさぞかし困っているかと思います。
この問題は、 PowerShell 2.0の頃から騒がれ、PowerShell 3.0 でも依然として残っています。
その概要と対応を見てみましょう。
どのような時に起こるのか
結論から言います。
cmd から powershell -command "hogehoge" や powershell -file .\hogehoge.ps1 とした時に、ホスト画面出力が多大な寮になった時
特に cmd から PowerShell Script を呼び出して いると起きます。
はい、Shell なのに! まさに OOが! って言いたくなる状況です。 (というか言いました)
スケジューラタスクなどからの呼び出しなど .bat が便利なシーンはあるので、困りますね。
対策
唯一の方法は、 ホスト画面を可能な限り減らすことです。
つまり、 Write-Output や Write-Host、 Write-Warning、Write-Error などの表示を過度に出さないことが必要です。
経過などは、 Write-Process を使うことで軽減できるのでおすすめです。
また、長いスクリプトを書いていて調整するなら、
前回の記事のような、便利コマンドレットを自作しておくのもおすすめです。
Tee-Objectは使い物にならないので厳禁です。
メモリ問題じゃないの?
この問題は、 memory や GC は関係ないのです。
そのため、
PowerShell でメモリ制限を調整するで紹介した方法で WinRM のメモリを足してもダメです。
Task manager でも 実際 PowerShell.exeは100MB 程度で出たりします。 (出力少なければ 1GB も平気なのに!)
当然cmd は 700kb程度とかです。
日本語OSだと起きやすい
日本語嫌いです。
英語OSでは、同じ出力量でもおきないのですから、
描画速度の問題といい 日本語嫌ですね。
海外のフォーラム
日本でもこういうフォーラムがあればいいのに! ないなら、もはや誰か作りませんか (白目
DOS commands stop working after executing bit of code in a script
Stability problem. Any application run fails with $LASTEXITCODE = -1073741502