gpt4 book ai didi

exception-handling - Powershell - 为什么根据 stderr 重定向/如何在 catch 中访问 "multiple"异常以不同方式处理异常?

转载 作者:行者123 更新时间:2023-12-04 03:53:01 24 4
gpt4 key购买 nike

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

Suppress sqlpackage.exe warnings/errors in Powershell when triggered using TFS build

但是,我正在开发的解决方法存在问题,如下所示

    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 记录了某些内容以及警告 - 即实际失败错误,我无法确定异常的附加文本。在 catch 中,我只能看到警告消息。如果我删除 stderr 重定向,则会记录完整输出,这是与权限相关的错误。

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

如有任何提示,我们将不胜感激。

最佳答案

此问题已在最新的 SqlPackage.exe 版本中修复 - 这是 2014 年 6 月的 DacFramework.msi 版本,它捆绑到 Visual Studio 的 2014 年 7 月 SQL Server 工具更新中。警告现在指向 StdOut 而不是 StdErr。

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

关于exception-handling - Powershell - 为什么根据 stderr 重定向/如何在 catch 中访问 "multiple"异常以不同方式处理异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14619885/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com