【问题标题】:Catching exceptions while running git commands in PowerShell在 PowerShell 中运行 git 命令时捕获异常
【发布时间】:2015-08-29 12:39:10
【问题描述】:

我刚刚开始学习 Git 和 Powershell,并尝试创建一个不复杂的 PS 脚本来同步 Git 的分支。

我想捕获在 powershell 中执行 git 命令期间可能发生的异常。

这是我的代码的摘录,我尝试使用标准的 try/catch 方法:

try { git reset --hard origin/master }
    catch  {

                LogMessage ("Failure on syncing files from the GitHub")
                LogMessage $_.Exception.Message;
                Return

            } 

LogMessage 是一个在文件中输出异常的函数。我使用 Posh-Git 运行脚本。

由于某些原因,这不起作用。 catch 不收集异常,不执行 return 命令,脚本仍在运行。

我错过了什么?

提前致谢,祝您有美好的一天。

【问题讨论】:

  • 好吧,您是否验证过您的脚本确实确​​实 进入了 catch 块,例如通过将简单的消息打印到控制台或类似的东西?
  • 设置错误动作停止。
  • 是的,我检查了脚本在异常发生时没有进入 catch 块。看起来 git 异常不是由 PowerShell 处理的。
  • 对于 ErrorAction 参数 - 看起来该参数对于 PowerShell 命令是实际的,但对于 Git 命令不是。当我尝试使用 ErrorAction 参数运行时,脚本失败 - “git : error: unknown switch `E'”

标签: powershell-3.0


【解决方案1】:

如果你愿意,你必须从 git 可执行文件中获取返回码并引发异常(但你为什么要这样做?!)

在运行 git 后尝试检查 $LASTEXITCODE 变量。它应该是 0 表示成功或不同的数字表示不同的错误。

【讨论】:

  • 是的,如果我将 git 作为外部进程运行,则使用 LATEXITCODE 的方法有效。下面是代码的摘录。但是 $_.Exception.Message 变量没有填充 Git 返回的异常消息。我可以通过 Git 功能分别记录 git 异常并将异常记录在存储 PowerShell 日志的同一文件中,但我正在寻找更好的方法(如果存在)。无论如何,感谢您的回复!
  • 这是使用 LASTERRORCODE 的提取: cmd.exe /c git reset1 --hard origin/master > $FileName if( $LastExitCode -ne 0 ){ LogMessage ("从 GitHub 同步文件失败") 日志消息 $_;返回 }
猜你喜欢
  • 1970-01-01
  • 2015-03-12
  • 2018-05-04
  • 1970-01-01
  • 1970-01-01
  • 2013-06-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多