PowerShellスクリプトでエラーが発生すると、正常に完了できなくなります。 Try catchブロックでエラー処理を使用すると、これらの終了エラーの管理と応答が可能になります。 この記事では、try/catchブロックの基本と、特定の例外メッセージを見つけて処理する方法について説明します。
構文の理解
try catchブロックの構文は非常に簡単です。, これは、中括弧で囲まれた二つのセクションで構成され、最初はtryブロックとして識別され、二番目はcatchブロックとして識別されます。
try { # Statement to try}catch { # What to do with terminating errors}
tryブロックには、必要な数のステートメントを含めることができますが、できるだけ少なく、おそらく単一のステートメントに保つことをお勧めします。 エラー処理のポイントは、一度に一つのステートメントを操作し、それで発生するすべてのものを処理することです。
PowerShellコンソールで発生するエラーの例を次に示します。, ここでは、New-Itemコマンドレットを使用して新しいファイルを作成し、パスに存在しないフォルダーを指定しています。
これがスクリプト内にあった場合、これを画面に出力するとスペースが無駄になり、問題がすぐに表示されない場合があります。 Try catchブロックを使用すると、エラー出力の操作を開始して、より管理者にやさしいものにすることができます。
try catchブロック内の同じNew-Itemコマンドは次のとおりです。 2行目で、ErrorActionパラメーターの値をStopコマンドに追加する必要があったことに注意してください。, すべてのエラーが”終了”と見なされるわけではないので、catchブロックに適切に終了するためにこのコードを追加する必要がある場合があります。
赤い怒っているようなテキストのブロックの代わりに、問題が発生したという単純な警告メッセージがあります。 存在しないパス名とforcing-ErrorAction Stopは、ロジックをcatchブロックにドロップし、カスタム警告を表示します。
$Error変数を使用する
読みやすくなりますが、これはあまり役に立ちません。, 私が知っているのは、コマ の代わりに表示する私のカスタムメッセージが表示できま特定のエラーメッセージが発生した全体ではなく、赤文字の例外ブロックです。 Tryブロックでエラーが発生すると、そのブロックは$Errorという名前の変数に保存されます。 $Error変数には最近のエラーの配列が含まれており、インデックス0の配列内の最新のエラーを参照できます。,
警告出力は、パスの一部が見つからなかったためにコマンドが失敗したことを示すようになりました。 このメッセージは元のエラーメッセージの一部でしたが、より簡潔になりました。
例外メッセージを使用する
特定のエラーを異なる方法で処理したい場合に備えて、複数のcatchブロックを使用することもできます。 ここでは、パスが存在しない場合のメッセージと、名前に不正な文字が使用されている場合のメッセージの二つの異なるカスタムメッセージを表示します。, 次のスクリーンショッ 各コマンド、catchブロック、および最終出力は、オレンジ色と緑の矢印で示されています。
14-16行目を見ると、例外メッセージのない第三のcatchブロックがあります。 これは、エラーが他のcatchブロック例外と一致しない場合に実行される”catch-all”catchブロックです。, このスクリプトを実行していて、最後のcatchブロックにメッセージが表示されている場合、エラーがファイル名の不正な文字またはパスの一部が有効で
ここで、最初の二つのcatchブロックで使用する例外メッセージをどのように知っていましたか? これは、$Error変数に添付されたさまざまな情報を見ることで見つけることができます。 失敗したコマンドが発生した後、$Errorを実行できます。例外だGetType()。最後に発生したエラーの例外メッセージを表示するFullName。,PowerShellコンソールに戻って、存在しないパスでNew-Itemコマンドを再実行し、$Errorコマンドを実行して例外メッセージを見つけました。
失敗したコマンドの直後の赤いテキストには例外メッセージも含まれていますが、どのモジュールからのもの $Error変数を見ると、catchブロックに使用される完全なメッセージが表示されます。,
をtry/catchブロックの追加電源にエラー処理スクリプトで、いろいろな活動をエラーとなります。 のcatchブロックを表示できる以上のものでエラーメッセージを表示します。 エラーを解決し、残りのスクリプトの実行を続行するロジックを含めることができます。