Модуль импорта SqlSp не работает в TeamCity, работает в собственном PowerShell
У меня странная проблема с запуском скрипта PowerShell в качестве шага сборки TeamCity, особенно с SqlPs
(хотя я не уверен, что это конкретно для SqlPs
).
Этот однострочный скрипт не работает в TeamCity:
Import-Module SqlPs
Со следующей ошибкой:
Import-Module : The specified module 'SqlPs' was not loaded because no valid module file was found in any module directory. At C:\TeamCity\buildAgent\temp\buildTmp\powershell2962302231054758126.ps1:13 char:1 + Import-Module SqlPs + ~~~~~~~~~~~~~~~~~~~ + CategoryInfo : ResourceUnavailable: (SqlPs:String) [Import-Module], FileNotFoundException + FullyQualifiedErrorId : Modules_ModuleNotFound,Microsoft.PowerShell.Commands .ImportModuleCommand
Я почти уверен, что все настроено правильно, потому что, если я открою PowerShell непосредственно с CI-сервера, на котором работает TeamCity, я могу запустить его без проблем.
Я даже могу запустить приведенный выше файл временного сценария, который TeamCity генерирует из собственного PowerShell, и он работает просто отлично.
Далее, если я выполню Get-Module
из родного PowerShell:
Get-Module -ListAvailable
Он выведет несколько системных модулей из:
C: \ Windows \ system32 \ WindowsPowerShell \ v1.0 \ Modules
Наряду с модулями SqlSp из:
C: \ Program Files \ Microsoft SQL Server \ 110 \ Tools \ PowerShell \ Modules
Но когда я бегу так же Get-Module
из сборки TeamCity будут перечислены только системные модули - нет SqlSp
модуль.
Я подумал, что это может быть проблема с разрешениями, но когда я захожу в собственный PowerShell под той же учетной записью, которую использует TeamCity, у меня все равно не возникает проблем.
Я также попытался выбрать x86 вместо x64 для битности, чтобы исключить это, и в любом случае это не удается.
Ввод "SqlPs"
в кавычках тоже не помогло.
3 ответа
Из-за проблемы, не связанной с этой проблемой, мне пришлось обновить TeamCity с версии 8 до 9. Не знаю почему, но выглядит так SqlSp
теперь работает отлично под TeamCity 9.
Простое решение вашей проблемы - добавьте путь к модулю по умолчанию, смотрите мой пример$env:PSModulePath
эта переменная окружения для модуля powershell Я хочу добавить еще один путь к psmodulepath по умолчанию
сначала посмотрите путь к модулю по умолчанию
C:\Users\soheil\Documents\WindowsPowerShell\Modules;C:\Program Files\WindowsPowerShell\Modules;C:\Windows\system32\Wind
owsPowerShell\v1.0\Modules\
Теперь попробуйте добавить другой путь к пути по умолчанию
$env:PSModulePath = $env:PSModulePath + ";c:\module\"
попробуйте еще раз, чтобы увидеть путь по умолчанию
C:\Users\soheil\Documents\WindowsPowerShell\Modules;C:\Program Files\WindowsPowerShell\Modules;C:\Windows\system32\Wind
owsPowerShell\v1.0\Modules\;c:\module\
Хотя это не решает проблему, почему это не работает:
Import-Module SqlPs
Я могу заставить это по крайней мере работать, указав полный путь в Import-Module
:
Import-Module "C:\Program Files\Microsoft SQL Server\110\Tools\PowerShell\Modules\SQLPS\SQLPS.PS1"
Все равно хотелось бы узнать, почему первый не работает.