この質問は、次の質問に関連しています。
TFS ビルドを使用してトリガーされたときに、Powershell で sqlpackage.exe の警告/エラーを抑制します。
ただし、以下に示すように、開発中の回避策に問題があります。
try {
& "C:\Program Files (x86)\Microsoft SQL Server\110\DAC\bin\SqlPackage.exe" /SourceFile:"$dacpac" /Profile:"$dbProfile" /p:UnmodifiableObjectWarnings=false /Action:Publish 2>&1
}
catch {
Write-Host "Exception: $_"
if($_.TargetObject -like $Pattern) {
Write-Host "Known exception - treat as warning"
}
if($LastExitCode -ne 0) {
throw "An error occurred deploying database. Please examine the log to determine the nature of the error"
}
}
stderr を stdout にリダイレクトしない場合、sqlpackage が警告をログに記録すると、プロセスは失敗を示します。
前のコマンドで stderr を stdout にリダイレクトすると、sqlpackage.exe が警告をスローしたときにプロセスを完了できますが、完了すると例外がスローされます。次に、既知の例外と同じ例外テキストを調べることができ、安全に無視できます。
ただし、警告だけでなく何かが sqlpackage によってログに記録されます。つまり、実際の失敗エラーです。例外の追加テキストを特定できません。キャッチ内で、私が見ることができるのは警告メッセージだけです。stderr リダイレクトを削除すると、完全な出力がログに記録されますが、これは権限に関連するエラーです。
したがって、私のスクリプトは必要なときに成功し、気にしないという警告を無視します。必要なときにも失敗しますが、適切なログメッセージを出力できません。次に、展開スクリプトを編集し、展開などを再実行する必要がありますが、すべて手間がかかり、再現できません。
どんなヒントでも大歓迎です。