导入模块SqlSp在TeamCity上失败,适用于本机PowerShell

时间:2015-03-28 02:59:20

标签: windows powershell teamcity sqlps

我在运行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

我非常确定我已正确配置了所有内容,因为如果我从运行TeamCity的CI服务器本机打开PowerShell,我可以毫无问题地运行它。

我甚至可以运行TeamCity在本机PowerShell中生成的上述临时脚本文件,它运行正常。

此外,如果我从本机PowerShell执行Get-Module

Get-Module -ListAvailable

它将转储以下几个系统模块:

  

C:\ Windows \ System32下\ WindowsPowerShell \ V1.0 \模块

来自:

的SqlSp模块
  

C:\ Program Files \ Microsoft SQL Server \ 110 \ Tools \ PowerShell \ Modules

但是当我从TeamCity构建中运行相同的Get-Module时,它只会列出系统模块 - 没有SqlSp模块。

我认为这可能是权限问题,但当我以与TeamCity使用的帐户相同的帐户登录本机PowerShell时,我仍然没有问题。

我也尝试选择x86而不是x64来获取比特,以便将其排除在外,并且无论如何都会失败。

"SqlPs"放在引号中也没有用。

3 个答案:

答案 0 :(得分:0)

虽然这并没有解决为什么这不起作用的问题:

Import-Module SqlPs

我可以通过在Import-Module中指定完全限定的路径来实现此目的:

Import-Module "C:\Program Files\Microsoft SQL Server\110\Tools\PowerShell\Modules\SQLPS\SQLPS.PS1"

仍然希望找出第一个没有工作的原因。

答案 1 :(得分:0)

由于与此问题无关的问题,我最终需要将TeamCity从版本8升级到9.不确定原因,但看起来SqlSp现在在TeamCity 9下运行正常。

答案 2 :(得分:0)

您的问题的简单解决方案是将您的模块路径添加到默认模块路径,请参阅我的示例 $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\