PowerShell では外部プログラムの標準エラー (stderr) を error stream に流すために大きな落とし穴があるので、まとめておく。 stderr を redirect して外部プログラムを起動し、 stderr に出力すると一行ごとに ErrorRecord でラップされる stdout への redirect 2>&1、ファイルへの redirect 2> a.txt、$null への redirect 2>$null で ErrorRecord でのラップがされる 外部プログラムの stderr を stdout やファイルに redirect すると、 NativeCommandErrorと出力される stderr に出力があるとエラーとみなされ $? は $false になり、エラーは $Errorに記録される。 $ErrorActionPrefere