【发布时间】:2014-07-03 16:52:52
【问题描述】:
每当我们在网络上的任何机器上启动 Powershell 时,我们都会立即在控制台中收到以下错误“尝试对 'FileSystem' 提供程序执行 InitializeDefaultDrives 操作失败。”
原因是,在启动时,Powershell 尝试将它可以找到的所有驱动器映射到 Powershell 对象,然而,出于某种原因,我们的运维人员已将我们所有的网络驱动器配置为“断开连接”,即使他们完全可以访问。 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。
我可以看到一些我们可能能够解决这个问题的潜在领域
- 找到阻止 Powershell 执行 InitializeDefaultDrives 操作的方法
- 以某种方式过滤掉批处理包装器中的特定错误,但仍将真正的错误传递回构建过程
- 解析 Invoke Process 工作流对象中的错误,以便特定错误不会导致失败,但所有其他错误仍然是每个构建过程。
非常感谢任何帮助! :)
【问题讨论】:
标签: powershell tfs build cmd tfsbuild