【发布时间】:2021-05-02 22:50:42
【问题描述】:
我一直在尝试寻找设置在 SSIS 包内配置的连接字符串属性的最佳方法。我读到一些系统配置参数被暴露。下面的代码正确设置了参数,但是,当我查询执行表时,包永远不会使用更改的参数或连接字符串运行。 (也许有人可以提供解决方案或者更好的方法来在powershell中的execute()之前动态设置包中的连接字符串)
[System.Reflection.Assembly]::Load("Microsoft.SQLServer.Management.IntegrationServices, "+
"Version=12.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91, processorArchitecture=MSIL") | Out-Null
$sqlConnectionString = `
"Data Source=xxx;Initial Catalog=master;Integrated Security=SSPI;"
$sqlConnection = New-Object System.Data.SqlClient.SqlConnection $sqlConnectionString
$SSISNamespace = "Microsoft.SqlServer.Management.IntegrationServices"
$SSIS = New-Object $SSISNamespace".IntegrationServices" $sqlConnection
$catalog = $SSIS.Catalogs["SSISDB"]
$parameterName ="CM.ClientDB.InitialCatalog"
$paramValue ="[SomeDatabase0001]" # I have tried it with and without brackets []
$ssisPackage = $catalog.Folders["ProjectFolder"].Projects["Project"].Packages["Package.dtsx"]
Write-Output $ssisPackage.Parameters[$parameterName]
$ssisPackage.Parameters[$parameterName].Set([Microsoft.SqlServer.Management.IntegrationServices.ParameterInfo+ParameterValueType]::Literal,$paramValue)
$ssisProject.Alter()
Write-Output $ssisPackage.Parameters[$parameterName]
try {
$ssisPackage.Execute("false", $null)
}
catch {
Write-Output "Fail"
}
Write-Output "Done"
输出似乎表明该值设置正确。
Name : CM.ClientDB.InitialCatalog
...
DesignDefaultValue : [SomeDatabase]
DefaultValue :
Name : CM.ClientDB.InitialCatalog
DesignDefaultValue : [SomeDatabase]
DefaultValue : SomeDatabase0001
...
32
Done
根据我在 ssisdb 中可以找到的内容:
SELECT * from internal.execution_parameter_values where parameter_name='CM.ClientDB.InitialCatalog'
...(never changes)
paramater_name paramater_value
--------------- --------------
CM.ClientDB.InitialCatalog [SomeDatabase]
CM.ClientDB.InitialCatalog [SomeDatabase]
CM.ClientDB.InitialCatalog [SomeDatabase]
CM.ClientDB.InitialCatalog [SomeDatabase]
CM.ClientDB.InitialCatalog [SomeDatabase]
...
【问题讨论】:
-
看PS,看不懂
$ssisProject是从哪里来的 -
@billinkc - 哇!这就是问题所在。调用 $ssisPackage.Alter() 时看起来更好。
标签: powershell ssis azure-powershell