12月3日の0時を過ぎてから書いてます。処理の自動化を得意とした言語です。自動処理において、エラーへの対処は重要です。何十万件というデータを処理してしまってから、実はエラーがあって、すべての処理結果が壊れているなんていうことになったら、目も当てられません。(一般論としては)エラーが起きたら、可及的速やかに処理を中断し、報告すべきです。別に何も目新しい話ではないのですが、自分でも時々「あれ、どうだったっけ?」と思うことがあるので、そのメモ書きです。以下のようなスクリプトを実行してみましょう。'World'結果はこんな感じになります。Oops!!コンソールには「Hello」は出ますが「World」は出ません。すると処理は中断されます。このように、コンソールに赤文字で表示されるエラーが出ていても、中断される状況とされない状況があります。ところを、このように書き換えると、存在しないパスを渡した時にも中断されます。指定することと同義です。エラーで止まるようになります。後でもずっとそのままです。安全側に倒したい自動処理スクリプトでは、こちらの方が向いていることもあるかもしれません。いう例外を発生させます。指定したりしておけば、それ以上処理が進むことはありません。書いたらどうなるでしょうか。'World'結果はこうなります。Microsoft.PowerShell.Commands.WriteErrorException,caller1.ps1World「Error!!」は表示されていません。エラーを捕まえられていません。パラメーターを設定すると挙動が変わります。'World'この場合の出力はこうなります。捕まえられるのは、前述した「中断されるエラー」だけだということです。他のスクリプトを呼び出す場合こんなスクリプトだとどうでしょうか。Stopコンソールには「World」は出力されません。例外が呼び出し元まで伝播しているということですね。ファイルごとに保持されたりはしません。先ほどのスクリプトを、こう書き換えると、挙動が変わります。指定していても、コンソールには「World」まで出力されます。あって、例外は親プロセスまでは伝播しません。これには、実行した外部アプリの終了コードが入ってきます。リセットするためです。ファイルなどを実行する場合でも同じことが言えます。スクリプトから呼び出し元に、任意の終了コードを返すことができます。