Ошибка Powershell InitializeDefaultDrives всегда мешает Team Build выполнить успешную сборку
Всякий раз, когда мы запускаем Powershell на любом компьютере в нашей сети, мы сразу же получаем следующую ошибку в консоли: "Попытка выполнить операцию InitializeDefaultDrives на поставщике файловой системы не удалась".
Причина этого заключается в том, что при запуске Powershell пытается сопоставить все диски, которые он может найти, с объектами Powershell, однако, по какой-то причине наши сотрудники из Ops настроили все наши сетевые диски, чтобы они выглядели как "отключенные", даже если они полностью доступны, Powershell видит эти диски как "отключенные" и выдает ошибку. Я пытался заставить парней из Ops изменить это, но, похоже, поведение нашей инфраструктуры достаточно глубоко.
При нормальном использовании это не слишком большая проблема, однако мы пытаемся запустить скрипт Powershell (с Psake) как часть процесса автоматической сборки через Team Build, и ошибка при запуске обнаруживается процесс сборки и приводит к тому, что наш процесс сборки только частично успешен, мы не можем добиться хорошей, зеленой, успешной сборки.
Наши скрипты Powershell на основе Psake запускаются из простого пакетного файла, который выглядит следующим образом:
cls
powershell -ExecutionPolicy Unrestricted -command "& \"%~dp0psake.ps1\"" %*
echo EXIT CODE - %ERRORLEVEL%
exit /b %ERRORLEVEL%
Этот пакетный файл вызывается из объекта рабочего процесса Invoke-Process в TeamBuild со стандартными выходными данными и выходными данными об ошибках, сопоставленными соответственно с stdout и stderr.
Я вижу несколько потенциальных областей, которые мы могли бы решить
- Найдите способ остановить Powershell от выполнения операции InitializeDefaultDrives
- Отфильтруйте эту конкретную ошибку в пакетной оболочке, но все же передайте подлинные ошибки обратно в процесс сборки
- Анализируйте ошибки в объекте рабочего процесса Invoke Process, чтобы конкретная ошибка не вызывала сбоя, но все остальные ошибки по-прежнему присутствуют в процессе сборки.
Любая помощь с благодарностью!:)
1 ответ
В конце концов я обнаружил, что мне не хватает проверки ошибок после моего звонка в 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%