每当我们在网络上的任何计算机上启动 Powershell 时,我们都会立即在控制台中收到以下错误“尝试对‘文件系统’提供程序执行 InitializeDefaultDrives 操作失败。”
这样做的原因是,在启动时,Powershell 会尝试将它能找到的所有驱动器映射到 Powershell 对象,但是,由于某种原因,我们的运维人员已将所有网络驱动器配置为显示为“断开连接”,即使它们完全连接可以访问。 Powershell 将这些驱动器视为“已断开连接”并引发错误。我试图让运营人员改变这一点,但这种行为似乎在我们的基础设施中根深蒂固。
在正常使用情况下,这并不是什么大问题,但是,我们尝试运行 Powershell 脚本(使用 Psake)作为通过 Team Build 自动构建过程的一部分,并且启动时的错误由构建过程并导致我们的构建过程仅部分成功,我们不可能实现良好的、绿色的、成功的构建。
我们基于 Psake 的 Powershell 脚本是从一个简单的批处理文件启动的,如下所示 -
cls
powershell -ExecutionPolicy Unrestricted -command "& \"%~dp0psake.ps1\"" %*
echo EXIT CODE - %ERRORLEVEL%
exit /b %ERRORLEVEL%
此批处理文件是从 TeamBuild 中的 Invoke-Process 工作流对象调用的,标准输出和错误输出分别映射到 stdout 和 stderr。
我可以看到一些我们可能能够解决这个问题的潜在领域
非常感谢任何帮助! :)
最终我发现在调用 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%
就我而言,这是一个损坏的共享文件夹。重新启动服务器后问题消失。