tech.guitarrapc.cóm

Technical updates

PowerShellをDOSコマンド画面で実行していると$LASTEXITCODE = -1073741502でが出る

このページを検索で見つけた人はさぞかし困っていることでしょう。 この問題は、 PowerShell 2.0の頃から騒がれ、PowerShell 3.0でも依然として残っています。

その概要と対応を見てみましょう。

どのような時に起こるのか

結論から言います。

cmdからpowershell -command "hogehoge"powershell -file .\hogehoge.ps1とした時に、ホスト画面出力が膨大な時に起こります。cmdからPowerShell Scriptを呼び出していると起きます。

スケジューラタスクなどからの呼び出しなど .batが便利なシーンはあるので、困りますね。

対策

唯一の方法は、 ホスト画面を可能な限り減らすことです。

Write-OutputWrite-Host/Write-Warning/Write-Errorの表示を過度に減らしましょう。 経過は、Write-Processを使うことで軽減できるのでおすすめです。

長いスクリプトを書いていて調整するなら、前回の記事のように便利コマンドレットを自作しておくのもおすすめです。

メモリ問題じゃないの?

この問題はメモリやGCは関係ないようです。

PowerShellでメモリ制限を調整するで紹介した方法でWinRMのメモリを足してもダメです。

タスクマネージャーでもPowerShell.exeは100MB程度で出たりします。出力少なければ1GBも平気なのに。

海外のフォーラム

日本でもこういうフォーラムがあればいいんですかねぇ。