Exception handling Powershell-为什么根据stderr重定向/如何访问对异常进行不同的处理;“多重”;捕获中的异常?

Exception handling Powershell-为什么根据stderr重定向/如何访问对异常进行不同的处理;“多重”;捕获中的异常?,exception-handling,powershell-3.0,Exception Handling,Powershell 3.0,这个问题与这里的问题有关: 但是,我对正在开发的变通方法有一个问题,如下所示 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 {

这个问题与这里的问题有关:

但是,我对正在开发的变通方法有一个问题,如下所示

    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重定向,则会记录完整输出,这是一个与权限相关的错误

因此,我的脚本在应该的时候成功了,并且忽略了我不关心它的警告。当我希望它也失败时,它也会失败,但是我无法输出相应的日志消息。然后,我需要编辑我的部署脚本,重新运行部署等等,所有这些都很复杂,不可重复


任何提示都将不胜感激。

此问题已在最新的SqlPackage.exe版本中得到解决,即2014年6月的DacFramework.msi版本,该版本已捆绑到2014年7月的Visual Studio SQL Server工具更新中。警告现在被定向到StdOut而不是StdErr


请注意,截至2014年4月,SqlPackage.exe的位置已更改-如果通过SSMS或DacFramework.msi安装,则它位于“C:\Program Files(x86)\Microsoft SQL Server\120\DAC\Bin”中。如果作为SQL Server工具的一部分安装在VS中,则它位于“C:\Program Files(x86)\Microsoft Visual Studio\Common7\IDE\Extensions\Microsoft\SQLDB\DAC\120”下,其中VisualStudioVersion对于VS2012为“11.0”,对于VS2013为“12.0”

有没有找到解决办法?有同样的问题。