Модуль импорта 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"

Все равно хотелось бы узнать, почему первый не работает.

Другие вопросы по тегам