2017-06-07 23 views
0

私は、次のコードを持っている:抑制を呼び出し、SQLCMD警告

invoke-sqlcmd -ServerInstance $server\$instance -InputFile "$Path\checkDBEncryption.sql" -ErrorAction Ignore -ErrorVariable var | Format-Table; 

を私はすでに別のファイルにエラーを記録していますので、呼び出し-のsqlcmdから何らかのエラーがPowerShellの出力から非表示にする必要があります。問題は、-ErrorAction Ignore(またはSilentlyContinue)が動作していないことと、$ ErrorActionPreferenceを設定することがオプションではないことです。

答えて

0

私はそれを変数に割り当てることを推奨:

$response = invoke-sqlcmd -ServerInstance $server\$instance -InputFile "$Path\checkDBEncryption.sql" -ErrorAction Ignore -ErrorVariable var | Format-Table; 

あなたがそのコマンドレットによって返される変数何にアクションを割り当てない場合

は、基本的には、コンソールにダンプされます。

場合によっては、コードの書き方によっては、変数の割り当てに問題が生じることもあります。

例として、値を返す関数があり、変数が関連付けられていない場合、関数を呼び出すインスタンスに返されます。

さらに、この問題を解決するための試行がログ記録の詳細を妨げていないことを確認することをお勧めします。私はあなたの修正がこの変数割り当てとして簡単だと信じています。

これは問題の解決に役立ちました。

+0

、それはしかし、質問に関連していないようでした。いずれにしても、エラーは抑制されません。 – Joe

+0

私はお詫びします。私は疑問を誤解しているに違いありません。これらのエラーはISE内での表示を抑止しようとしていますか? – Mitchell

1

あなたはそれがあったように、ビットバケットにものを送信する場合は、次の3つの方法のいずれかを使用します。

cmdlet | out-null 

か...

[void]cmdlet 

か...(をあなたのケースに関係します):

cmdlet -ErrorVariable $errorvar 
cmdlet -WarningVariable $warningvar 

すべての最新のシェルでは、「I/O」はストリーム経由で行われます。最も一般的なものは、標準出力(STDOUT)、標準エラー(STDERR)、および標準入力(STDIN)です。 PowerShellにはより多くの機能があります(デバッグ、冗長など)。ほとんどの場合、通常の出力は3つのメインストリームのうちの1つに入ります。ただし、冗長ストリームまたはデバッグストリームからデータをエミュレートすることもできます。ほとんどの相互作用は3つの主要な種類に基づいているので、コマンドレットからの出力を割り当てようとすると、基本的にSTDOUTから何かを割り当てようとしていますが、データはSTDOUTから来ています...

それが不可欠であるため、

try { 
    cmdlet -ERRORACTION STOP 
} catch { 
    ## Do something with $_ or $error[0] or nothing at all 
} 

-ErrorAction停止はすべて大文字である:実際にエラーを処理し、あなたはそれとそのための構文は、このようにあるトラップする必要があります。エラートラップはエラーの終了のみを捕捉します。 PowerShellは既定で非終了型(上記で説明したエラーアクション設定変数を使用しています)のエラーがあります。このため、このコマンドレットがエラーで終了するように明示的に定義する必要があります。これにより、必要に応じてエラートラップロジックがさまざまなエラー条件を処理できるようになります。

EDIT - コメントからの例を含む:私は実際にそれが変数に割り当てられている

try { 
    $sql = invoke-sqlcmd -ServerInstance $server\$instance -InputFile "$Path\checkDBEncryption.sql" -ErrorAction Stop 
} catch { 
    ## do nothing, leave this blank or leave this comment 
} 
+0

私はあなたが何を意味するか完全にはわかりません。私はこのシナリオでは必要ないので、エラーを処理する必要はありません。私はちょうどスクリプトが実行されている間、PowerShellの画面に出力する赤いエラーテキストを保持したいと思います。このスクリプトのユーザーは、エラーが発生した行を表示する必要はありません。 – Joe

+1

出力を抑止する場合は、上記のオプションが用意されています。「エラー」の原因となるストリームを特定し、それを変数に代入するか、ビットバケットに送信するか、 try/catchを使用してエラーが発生しました。 try/catchを使用しても、catchステートメントで何もする必要はありませんが、構文が必要です。 – thepip3r

関連する問題