1

我在将 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 中生成的上述临时脚本文件,它工作得很好。

此外,如果我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模块。

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

我还尝试选择 x86 而不是 x64 来排除这种情况,但无论哪种方式都失败了。

加上"SqlPs"引号也没有帮助。

4

3 回答 3

0

由于与此问题无关的问题,我最终需要将 TeamCity 从版本 8 升级到 9。不知道为什么,但看起来SqlSp现在在 TeamCity 9 下工作得很好。

于 2015-03-28T03:54:12.447 回答
0

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

Import-Module SqlPs

我可以通过在以下指定完全限定的路径来使其至少工作Import-Module

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

仍然很想知道为什么第一个不起作用。

于 2015-03-28T02:59:19.917 回答
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\
于 2015-03-28T10:20:13.177 回答