我在运行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"
放在引号中也没有用。
答案 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\