【问题标题】:Psake and robocopy failingPsake 和 robocopy 失败
【发布时间】:2013-05-14 21:21:51
【问题描述】:

Robocopy 将以高于 0 的代码退出,但仍可能不会失败。 PSake 将任何高于 0 的内容检测为失败并导致构建失败。这很好,但是为什么这个仍然失败了:

task Deploy {    
        robocopy $source $dest /NP /S /XO /NFL /NDL /NJH /NJS | Out-Default

    if ($lastexitcode -eq 3)
    {
       Write-Host "Got Here"
       $lastexitcode = 0       
    }

    Write-Host "Deploy local complete"
    Write-Host $lastexitcode
}

TaskTearDown {  
    if ($LastExitCode -ne 0) {
        write-host "Build failed"
        exit 1
    }
}

我可以验证 Deploy if 语句被命中并且 Write-Host 正确输出 0,但 TaskTearDown 仍然检测到最后一个退出代码为 3!我该如何解决?

【问题讨论】:

  • 我不会分配$lastexitcode,它是一个自动变量。赋值可能会创建一个局部变量,TaskTearDown 仍然可以看到原始变量。无论如何,请尝试使用不带$lastexitcode = 0 的不同方法。

标签: powershell robocopy psake


【解决方案1】:

robocopy 低于 8 的退出代码是非错误状态代码。只有 8 及以上的退出代码表示错误。见here

您的拆卸任务仍然报告退出代码 3 的原因可能是因为自动变量 $LastExitCode 是一个全局变量,而您的部署任务创建了一个额外的本地 em> 变量$lastexitcode 屏蔽了任务范围内的全局变量。正如this answer 中对类似问题的建议,使用$global: 前缀:

$global:LastExitCode = $null

【讨论】:

  • 啊,这是一个范围界定问题!谢谢!仍然很新的豪华。 PSake 实际上寻找 0 并会抛出 null ...所以 $global:LastExitCode = 0 是我需要的。
  • 错误代码4(不匹配)表示文件名作为文件存在于源中,但已作为目录存在于目标中。我会称之为错误;为什么它不被认为是一个?
  • @cowlinator 我不知道,因为我没有参与做出那个决定,我也不会推测原因。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-23
  • 2018-06-19
相关资源
最近更新 更多