PowerShell エラーを抑制する方法

  1. PowerShell におけるエラーアクションの概要
  2. PowerShell で -ErrorAction パラメーターを使用する
  3. PowerShell でのエラーアクションの設定
  4. PowerShell で Try-Catch 文パラメーターを使用する
  5. 結論
PowerShell エラーを抑制する方法

この記事は、PowerShell のエラーハンドリングの複雑な世界について掘り下げ、-ErrorAction パラメーター、エラーアクションの設定、Try-Catch 文の使用などのさまざまな方法を探ります。これらの各方法は、エラーが発生してもスクリプトの実行を静かに続けることから、洗練されたエラーハンドリングメカニズムを実装することまで、独自の目的を果たします。

この詳細な探求は、初心者と経験豊富なスクリプターの両方に、彼らの PowerShell スクリプトにおけるエラーハンドリングについての知識を提供し、予期しない状況を効果的に管理し、スクリプトの完全性を維持できるように設計されています。

PowerShell におけるエラーアクションの概要

Windows PowerShell のエラーを抑制するのは簡単ですが、そうすることが常に最良の選択肢ではありません(場合によってはそうであるかもしれません)。PowerShell にエラーを隠すように無造作に指示すると、スクリプトが予測不可能に動作する可能性があります。

エラーメッセージを抑制すると、トラブルシューティングや情報収集がはるかに複雑になります。それゆえ、この記事で見る次のスニペットを使用する際には、慎重に行動してください。

PowerShell で -ErrorAction パラメーターを使用する

PowerShell の -ErrorAction パラメーターは、コマンドレットがランタイムエラーにどのように応答するかを決定するために設計されています。デフォルトでは、PowerShell はエラーをコンソールに表示し、実行を続行します。

しかし、特定のシナリオでは、この動作を変更したい場合があります。たとえば、エラーメッセージを抑制したり、エラーが発生したときに実行を停止したりしたいときです。ここで -ErrorAction が重要になります。

コマンド:

Get-Service 'svc_not_existing' -ErrorAction SilentlyContinue
Write-Host "This line will execute regardless of the above command's result."

私たちのスクリプトでは、存在しないと思われるサービス'svc_not_existing'を取得しようとしています。-ErrorAction SilentlyContinue を適用することで、PowerShell に中断せずに続行するよう指示し、サービスを見つけられなかった場合のエラーメッセージの表示を避けています。

その後、私たちのスクリプトはスムーズに Write-Host コマンドに移行します。このコマンドは、特定のメッセージをコンソールに出力します。

出力:

PowerShell のエラーを抑制する - 出力 1

PowerShell でのエラーアクションの設定

スクリプトに特定の動作をさせる必要がある場合(たとえば、エラーを抑制するなど)、いくつかの設定変数を設定することを検討するかもしれません。設定変数は PowerShell の構成設定として機能します。

設定変数を使用して、PowerShell が保持する履歴項目の数を制御したり、特定のアクションを実行する前にユーザーに確認を求めたりすることができます。

例えば、以下のようにして、全セッションで -ErrorAction パラメーターを SilentlyContinue に設定できます。

コマンド:

$ErrorActionPreference = 'SilentlyContinue'
Get-Service 'nonexistent_service'
Write-Host "This message is displayed even if the previous command fails."

私たちのスクリプトでは、まず $ErrorActionPreference'SilentlyContinue'に設定します。このアクションにより、すべての後続のコマンドに設定が適用されます。

その結果、通常発生するはずのエラーが効果的に抑制されます。

次に、Get-Service コマンドレットを使用して存在しないサービスを取得しようとします。通常、この操作はエラーを引き起こします。しかし、$ErrorActionPreference を以前に設定したおかげで、本来生成されるはずのエラーは見えず、目立たない状態になります。

この後、私たちのスクリプトは優雅に Write-Host コマンドに移動します。このコマンドは、コンソールにメッセージを表示する役割を担っています。

出力:

PowerShell エラーを抑制する - 出力 2

ErrorAction スイッチパラメーターには、指定できる他のエラーアクションがたくさんあります。

  • Continue: PowerShell はエラーメッセージを表示しますが、スクリプトの実行を続けます。
  • Ignore: PowerShell はエラーメッセージを生成せず、エラー出力をホストに書き込み、実行を続けます。
  • Stop: PowerShell はエラーメッセージを表示し、スクリプトの実行を停止します。
  • Inquire: PowerShell はエラーメッセージを表示しますが、続行するかどうかをユーザーに確認します。
  • SilentlyContinue: PowerShell は静かにコードの実行を続けます。
  • Suspend: PowerShell はスクリプトのワークフローを一時停止します。

PowerShell で Try-Catch 文パラメーターを使用する

Try-Catch 文は、PowerShell においてエラーを管理し、制御された洗練された方法で応答するための強力なツールです。スクリプターはコードのブロックを try し、実行中に発生する例外(エラー)を catch することができます。

このアプローチは、エラーを優雅に処理したり、エラーが発生した際に特定のアクションを実行したり、エラーがスクリプトを突然中断させるのを防いだりしたい時に有益です。

コマンド:

try {
    Get-Service 'nonexistent_service'
}
catch {
    Write-Host "An error occurred: $_"
}

このスクリプトでは、最初に潜在的にエラーを引き起こす可能性のあるコマンド、Get-Service 'nonexistent_service'try ブロックで囲みます。存在しないと思われるサービスを取得しようとしており、通常はエラーが発生するでしょう。

しかし、このエラーがスクリプトを終了させたり、処理されていない例外を表示させたりするのではなく、私たちはそれを捕まえます。catch ブロック内で、エラーの詳細を含むカスタムエラーメッセージを表示するために Write-Host コマンドを実行します($_ は現在のエラーオブジェクトを表します)。

出力:

PowerShell エラーを抑制する - 出力 3

結論

PowerShell におけるエラーハンドリングのさまざまな側面を通じての旅を締めくくるにあたり、このスクリプト言語の力はその柔軟性と深さにあることが明らかです。-ErrorAction パラメーターのシンプルさから、Try-Catch 文によって提供される微妙な制御まで、PowerShell はさまざまなシナリオでエラーを管理するための豊富なツールキットを提供します。

これらのツールを理解し、いつ適用するかを知ることは、堅牢で強靭なスクリプトを書くために不可欠です。エラーを抑制することが文脈によっては恩恵でありリスクでもあることを探求し、後の分析のためにエラーを捕らえる方法について見てきました。

今や、あなたはこれらの方法について包括的な理解を持ち、スクリプティングの取り組みでそれらを適用できる準備が整ったはずです。

チュートリアルを楽しんでいますか? <a href="https://www.youtube.com/@delftstack/?sub_confirmation=1" style="color: #a94442; font-weight: bold; text-decoration: underline;">DelftStackをチャンネル登録</a> して、高品質な動画ガイドをさらに制作するためのサポートをお願いします。 Subscribe
Marion Paul Kenneth Mendoza avatar Marion Paul Kenneth Mendoza avatar

Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.

LinkedIn