たとえば、PowerShellスクリプトが、存在しないサーバー(この場合は「bla」)のSQL Serverオブジェクトを作成しようとすると、PowerShellは多くのPowerShellエラーを赤で表示します。
私のスクリプトは、$?
このような呼び出しの後の値をチェックし、エラーを表示してログに記録するので、PowerShellエラーの数行も表示したくありません。
スクリプトに表示されているものを非アクティブにするにはどうすればよいですか?
たとえば、PowerShellスクリプトが、存在しないサーバー(この場合は「bla」)のSQL Serverオブジェクトを作成しようとすると、PowerShellは多くのPowerShellエラーを赤で表示します。
私のスクリプトは、$?
このような呼び出しの後の値をチェックし、エラーを表示してログに記録するので、PowerShellエラーの数行も表示したくありません。
スクリプトに表示されているものを非アクティブにするにはどうすればよいですか?
回答:
いくつかのオプションがあります。最も簡単なのは、ErrorAction
設定の使用です。
-Erroraction
すべてのコマンドレットの共通パラメーターです。無視したい特別なコマンドがある場合は-erroraction 'silentlycontinue'
、そのコマンドによって生成されたすべてのエラーメッセージを基本的に無視するコマンドを使用できます。次のIgnore
値も使用できます(PowerShell 3以降)。
SilentlyContinueとは異なり、Ignoreは$ Error自動変数にエラーメッセージを追加しません。
スクリプト内のすべてのエラーを無視する場合は、システム変数$ErrorActionPreference
を使用して同じことを行うことができます。$ErrorActionPreference= 'silentlycontinue'
-ErrorActionの詳細については、about_CommonParametersを参照してください。$ ErrorActionPreferenceの詳細については、about_preference_variablesを参照してください。
-ErrorAction:SilentlyContinue
PS 5.1のようにフォーマットする必要がありました。私はコマンドレットをバッチから呼び出していたので、それが違いをもたらすかどうかはわかりません。ただし、許容可能なエラーがスローされる可能性があることがわかっている場合は、適切な情報が得られます。
Windows PowerShellは、エラーを報告するための2つのメカニズムを提供します。1つはエラーを終了するメカニズムで、もう1つはエラーを終了しないメカニズムです。
内部CmdLetsコードはThrowTerminatingError
、コマンドレットが入力オブジェクトの処理を続行できない、または許可しないエラーが発生したときにメソッドを呼び出すことができます。スクリプト作成者は、例外を使用してこれらのエラーをキャッチできます。
EX:
try
{
Your database code
}
catch
{
Error reporting/logging
}
WriteError
コマンドレットが入力オブジェクトの処理を続行できる場合、内部CmdLetsコードはメソッドを呼び出して非終了エラーを報告できます。スクリプト作成者は、-ErrorActionオプションを使用してメッセージを非表示にするか、$ErrorActionPreference
を使用してスクリプト全体の動作を設定できます。
あなたはここで軌道から外れています。
あなたはすでに素晴らしい大きなエラーメッセージを持っています。なぜ地球上で$?
、すべてのコマンドの後で明示的にチェックするコードを書きたいのですか?これは非常に扱いにくく、エラーが発生しやすくなります。正しい解決策は、チェックを停止すること$?
です。
代わりに、PowerShellの組み込みメカニズムを使用して爆破します。これを有効にするには、エラー設定を最高レベルに設定します。
$ErrorActionPreference = 'Stop'
私はこれをこれまでに書いたすべてのスクリプトの一番上に置き、今では確認する必要はありません$?
。これにより、コードが大幅にシンプルになり、信頼性が高まります。
あなたが状況に遭遇した場合は、実際にこの動作を無効にする必要があり、どちらかの可能catch
エラーまたは共通を使用して、特定の機能に設定を渡します-ErrorAction
。あなたのケースでは、最初のエラーでプロセスを停止し、エラーをキャッチしてログに記録したいと思うでしょう。
これは、外部実行可能ファイルが失敗した場合(通常、コードをゼロ以外で終了する)を処理しないので、$LASTEXITCODE
何かを呼び出すかどうかを確認する必要があることに注意してください。この制限にもかかわらず、この設定では多くのコードと労力が節約されます。
strictモードの使用も検討してください。
Set-StrictMode -Version Latest
これにより、存在しない変数を使用した場合やその他の奇妙な状況で、PowerShellが警告なしに処理されるのを防ぎます。(-Version
制限の詳細については、パラメーターを参照してください。)
これら2つの設定を組み合わせると、PowerShellはフェイルファスト言語になり、プログラミングが非常に簡単になります。
-ErrorAction SilentlyContinue
スクリプトに追加すれば、準備は完了です。
コマンドレットのpowershellエラーメッセージを抑制したいが、エラーをキャッチしたい場合は、「-erroraction 'silentlyStop'」を使用します。
New-Item -ItemType directory
(PowerShell v2.0)を使用しているときにcatchコマンド/セクションを使用することを可能にします