在TFS 2015上无法识别导入模块SQLPS

时间:2017-07-11 00:08:00

标签: tfs sqlps

我正在为CI构建过程添加集成测试。

我有一个数据库项目(通过dacpac)部署到TFS服务器上的localDb实例。 (工作)

下一步是将测试数据加载到数据库中。我试图导入SQLPS模块,然后运行Invoke-SqlCmd命令行开关。

Import-Module 'SQLPS' -DisableNameChecking;
Invoke-Sqlcmd -InputFile "$localDirectory\products\$branch\UnitTestData.sql" -ServerInstance "(localdb)\v12.0" -Database "[db]"

我不断收到SQLPS无法识别的错误。

TFS服务器安装了SQL Server 2012 - 但我使用的是2014对象。我安装了SQL 2014 Feature Pack,以便在服务器和构建代理上提供powertools。

这似乎很常见 - 但我不确定我在哪里出错了。

1 个答案:

答案 0 :(得分:0)

弄明白这一点。 Powershell不是我更强大的套装之一,因此对于在其构建服务器上寻找SQL Server Powershell工具的其他人来说。

您需要在构建服务器上安装SQL Server功能包(如果未安装SQL Server)。功能包适用于2012及以上版本。

您需要的具体项目是: SQL CLR类型 SQL共享管理对象 Powershell工具

Powershell工具将安装在C:\ Program Files \ Microsoft SQL Server {version} \ Tools \ PowerShell \ Modules目录中。其中{version:110 = 2012,120 = 2014,130 = 2016}

使用PS工具的路径引用 - 您需要做的就是创建一个本地模块路径引用:

Param(
    [Parameter(Mandatory=$True)][string]$server,
    [Parameter(Mandatory=$True)][string]$database,
    [Parameter(Mandatory=$True)][string]$sqlPowerToolsPath,
    [Parameter(Mandatory=$True)][string]$sqlFile
)

$env:PSModulePath = $env:PSModulePath + ";$sqlPowerToolsPath"

我的PS脚本需要参数server,database,sqlPowerToolsPath,sqlFile,我设置本地会话PSModulePath以包含参数中的路径。在我的情况下C:\ Program Files \ Microsoft SQL Server \ 120 \ Tools \ PowerShell \ Modules。

脚本的其余部分导入SQLPS模块并执行参数中指定的SQL文件:

Import-Module 'SQLPS' -DisableNameChecking;
$sql = [Io.File]::ReadAllText($sqlFile);
Invoke-Sqlcmd -Query $sql -ServerInstance "$server" -Database "$database"