【问题标题】:psake error code managementpsake错误代码管理
【发布时间】:2014-01-06 11:13:30
【问题描述】:

我有一个运行 mercurial 命令失败的任务,因为 mercurial 没有返回 0 而是 1。

当 mercurial 返回 1 并不意味着它是一个错误,但没有什么可做的。 根据文档:

Returns 0 if push was successful, 1 if nothing to push.

如何处理我的任务中的返回,以便当 hg 命令返回 0 或 1 时它不会中断。

这是失败的功能

Function Invoke-HgBookmark([string]$bookmarkname)
{
    $repo = GetCredentials
    & $hg.file bookmark -f $bookmarkname
    Invoke-Expression "$($hg.file) push -B $bookmarkname $repo"
    if ($LASTEXITCODE -eq 0 -Or $LASTEXITCODE -eq 1)
    {
        return 0
    }
    else
    {
        return -1
    }
}

Psake 正在使用此代码调用我的函数:

try {
    $global:lastexitcode = 0                 
    & $cmd
   if ($lastexitcode -ne 0) {
        throw ("Exec: " + $errorMessage)
    }
    break
}

【问题讨论】:

  • 您的函数似乎正在尝试处理 1 的退出代码。该函数是返回 -1 还是以其他方式失败?如果它返回-1 - 坚持Write-Host "$LastExitCode" 以查看您获得的退出代码。您的 if 表达式逻辑看起来不错。顺便说一句,调用表达式是什么?我不明白为什么您不能像在 iex 上方的行中那样调用 $hg.file。
  • 其实我正在学习powershell...我不需要iex。回到我的问题,我添加了 psake 正在使用的代码,我无法覆盖 $lastexitcode 以防 hg 返回 1
  • 啊,在这种情况下,请尝试将 Return x 替换为 $LastExitCode = x
  • $LastExitCode 不起作用,$global:lastexitcode = 0 工作正常。不太清楚为什么......我会尝试挖掘一点并写一个像样的答案
  • 是的,这是有道理的。当您在脚本中设置 $LastExitCode 时,它​​会修改设置它的函数范围的值。所以是的,我应该说使用$global:LastExitCode = x

标签: powershell psake


【解决方案1】:

在函数中,将$global:LastExitCode 设置为所需的值,然后再退出。您必须使用 global: 前缀才能修改全局变量。否则,PowerShell 会执行“写时复制”操作并修改函数本地的同名变量。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-02-14
    • 1970-01-01
    • 2015-05-28
    • 2014-11-29
    • 2011-01-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多