Powershell InitializeDefaultDrives错误始终会阻止Team Build执行成功构建

时间:2014-05-15 09:55:45

标签: powershell tfs build cmd team-build

每当我们在网络上的任何机器上启动Powershell时,我们立即在控制台中收到以下错误'尝试在'FileSystem'提供程序上执行InitializeDefaultDrives操作失败。'

原因是在启动时Powershell会尝试将它可以找到的所有驱动器映射到Powershell对象,但是,出于某种原因,我们的Ops人员已将所有网络驱动器配置为“断开连接”,即使它们完全可以访问。 Powershell将这些驱动器视为“断开连接”并引发错误。我试图让Ops的人改变这一点,但这种行为似乎在我们的基础设施中得到了很好的设定。

在正常使用情况下,这不是一个问题,但是,我们尝试通过Team Build运行Powershell脚本(使用Psake)作为自动构建过程的一部分,并选择启动时的错误通过构建过程并使我们的构建过程仅部分成功,我们不可能实现一个漂亮,绿色,成功的构建。

我们基于Psake的Powershell脚本是从一个看起来像这样的简单批处理文件开始的 -

cls
powershell -ExecutionPolicy Unrestricted -command "& \"%~dp0psake.ps1\"" %*
echo EXIT CODE - %ERRORLEVEL%
exit /b %ERRORLEVEL%

此批处理文件从TeamBuild中的Invoke-Process工作流对象调用,标准输出和错误输出分别映射到stdout和stderr。

我可以看到一些可能解决这个问题的潜在领域

  1. 找到一种方法来阻止Powershell执行InitializeDefaultDrives操作
  2. 以某种方式过滤掉批处理包装器中的特定错误,但仍将正版错误传递回构建过程
  3. 解析Invoke Process工作流对象中的错误,以便特定错误不会导致失败,但所有其他错误仍然是构建过程。
  4. 任何帮助非常感谢! :)

1 个答案:

答案 0 :(得分:0)

最后我发现在调用Powershell后我错过了一些错误检查,所以我的批处理文件应该看起来像这样...

cls
powershell -ExecutionPolicy Unrestricted -command "& \"%~dp0psake.ps1\"" %*; if ($psake.build_success -eq $false) { exit 1 } else { exit 0 }
echo EXIT CODE - %ERRORLEVEL%
exit /b %ERRORLEVEL%