Развертывание dacpac с заменой переменных с помощью powershell

У нас есть функция ниже, которая развертывает dacpac. Я искал, как передавать переменные для dacpac. Это возможно?

Function DeployDB {

param( 
    [string]$SqlServerName = $( throw "Missing required parameter SqlServerName"), 
    [string]$SqlServerUserName = $( throw "Missing required parameter SqlServerUserName"), 
    [string]$SqlServerPassword = $( throw "Missing required parameter SqlServerPassword"), 
    [string]$dacpac = $( throw "Missing required parameter dacpac"), 
    [string]$dbname = $( throw "Missing required parameter dbname") 
    )

Write-Host "Deploying the DB with the following settings" 
Write-Host "Server Name: $SqlServerName" 
Write-Host "DACPAC: $dacpac" 
Write-Host "Name: $dbname"

# load in DAC DLL, This requires config file to support .NET 4.0.
# change file location for a 32-bit OS 
#make sure you
add-type -path "C:\Program Files (x86)\Microsoft SQL Server\110\DAC\bin\Microsoft.SqlServer.Dac.dll"

# Create a DacServices object, which needs a connection string 
$dacsvcs = new-object Microsoft.SqlServer.Dac.DacServices "server=$SqlServerName;User ID=$SqlServerUserName;Password=$SqlServerPassword;"

# register event. For info on this cmdlet, see http://technet.microsoft.com/en-us/library/hh849929.aspx 
register-objectevent -in $dacsvcs -eventname Message -source "msg" -action { out-host -in $Event.SourceArgs[1].Message.Message } | Out-Null

# Load dacpac from file & deploy database
$dp = [Microsoft.SqlServer.Dac.DacPackage]::Load($dacpac) 
$dacsvcs.Deploy($dp, $dbname, $true) 

# clean up event 
unregister-event -source "msg" 

}

person MrBeanzy    schedule 05.08.2016    source источник
comment
Не могли бы вы пояснить, что вы подразумеваете под проходными переменными для dacpac? Кстати, в указанном выше пути используется очень старая версия DACFx. Самая последняя версия (доступна здесь: microsoft.com/en-us /download/details.aspx?id=53013) устанавливается в папку SQL Server \ 130 \ DAC \ bin.   -  person Steven Green    schedule 05.08.2016
comment
Отсутствуют значения для следующих переменных SqlCmd: DeploymentName. (Microsoft.Data.Tools.Schema.Sql) У нас есть единственная переменная, которую нужно передать   -  person MrBeanzy    schedule 08.08.2016
comment
Вам больше не нужно устанавливать SQLPackage, они выпустили пакет NuGet, который его содержит. Посмотрите здесь nuget.org/packages/Microsoft.Data.Tools.Msbuild < / а>   -  person Eugene Niemand    schedule 22.09.2016


Ответы (1)


Вы можете попробовать создать параметры развертывания следующим образом и передать их в качестве четвертого параметра функции Deploy().

$deployOptions = New-Object Microsoft.SqlServer.Dac.DacDeployOptions
$deployOptions.SqlCommandVariableValues.Add("SqlCmdParamName", "ParamValue");
person sasha_gud    schedule 18.08.2016
comment
Попробуйте $ deployOptions.SqlCommandVariableValues ​​вместо $ deployOptions.SqlCmdVariableValues - person Iván Sainz; 13.06.2017