在同一个命令上可以在`$?`上得到不同的结果吗?

时间:2014-11-24 21:03:46

标签: powershell tfsbuild powershell-v3.0 tfs2013

我有一个powershell脚本,我正在执行一个节点命令,该命令由TFS 2013 Build执行:

node "$Env:TF_BUILD_SOURCESDIRECTORY\app\Proj\App_Build\r.js" -o "$Env:TF_BUILD_SOURCESDIRECTORY\app\Proj\App_Build\build-styles.js"
$success = $?
if (!$success){
    exit 1
}

当我手动运行此脚本且命令失败$successfalse且脚本为exits 1时,但当构建执行脚本且node命令失败时$success(和$?)是true

什么可以改变powershell的行为?我不知道还有什么可以尝试的。到目前为止,我删除了以下内容:

  1. 将Build Service用户更改为手动执行脚本的同一管理员用户
  2. 尝试使用cmd /c node ...
  3. 执行命令
  4. 尝试使用Start-Process node...
  5. 执行命令
  6. 以交互方式运行Build Service
  7. 使用VSO Build Controller和内部构建控制器
  8. 进行构建
  9. 使用TFS使用的相同命令(根据构建日志)手动执行脚本
  10. 思想?

1 个答案:

答案 0 :(得分:0)

我们可以对此进行重组,以便我们对发生的事情有更好的感受吗?我倾向于避免$?因为用它调试和测试起来比较困难。

try
{
    Write-Host "TF_BUILD_SOURCESDIRECTORY = $Env:TF_BUILD_SOURCESDIRECTORY"
    $result = node "$Env:TF_BUILD_SOURCESDIRECTORY\app\Proj\App_Build\r.js" -o "$Env:TF_BUILD_SOURCESDIRECTORY\app\Proj\App_Build\build-styles.js"
    Write-Host "Result = $result"
}
catch
{
    Write-Error "Command failed"
    Exit 1
}

有时我将命令包装在Start-Process -NoNewWindow -Wait中只是为了查看是否会生成不同的错误消息。

在您的情况下,我还会尝试Enter-PSSession在TFS服务器上获取非交互式提示。我已经看到过,当shell不是交互式时,powershell会不同地起作用。