PowerShell调用SSIS包,传递两个(或更多)参数

问题描述 投票:0回答:1

我正在编写一组 PowerShell 脚本来调用 SSIS 包,传递从 Azure 密钥保管库获取的 SQL 密码。 当 SSIS 包只有一个连接时,它工作得很好 - 例如:

    DTEXEC /FILE "./$ProcessName.dtsx" /CONFIGFILE "$ScriptDirectory\config\$env\$ProcessName.dtsConfig" /MAXCONCURRENT " -1 " /CHECKPOINTING OFF /CONSOLELOG SM /REPORTING EWCDI /SET "\Package.Connections[DATABASE.INC.DB].Properties[Password];$secretpwd" > $SSISLog

如果有 2 个或更多数据库需要传递密码,语法是什么? 我认为我不能包含 2 个 SET 语句

powershell ssis parameter-passing
1个回答
0
投票

当 SSIS 包只有一个连接时,它就可以正常工作。 如果有 2 个或更多数据库需要传递密码,语法是什么?

两种潜在的解决方案

#1

设置一个包含数据库名称的数组,然后循环遍历每个名称来执行

DTEXEC
命令,同时将数据库名称和密码动态注入到命令中。这种方式可以处理多个数据库连接,而无需使用多个
SET
语句。

$dbs = @("DATABASE.INC.DB","DATABASE.INC.XY","DATABASE.INC.ABC");
foreach($db in $dbs){ 
    DTEXEC /FILE "./$ProcessName.dtsx" /CONFIGFILE "$ScriptDirectory\config\$env\$ProcessName.dtsConfig" /MAXCONCURRENT " -1 " /CHECKPOINTING OFF /CONSOLELOG SM /REPORTING EWCDI /SET "\Package.Connections[$db].Properties[Password];$secretpwd" > $SSISLog
    ##Write-Host "DTEXEC /FILE `"./$ProcessName.dtsx`" /CONFIGFILE `"$ScriptDirectory\config\$env\$ProcessName.dtsConfig`" /MAXCONCURRENT `" -1 `" /CHECKPOINTING OFF /CONSOLELOG SM /REPORTING EWCDI /SET `"\Package.Connections[$db].Properties[Password];$secretpwd`" > $SSISLog"
    };

#2

定义数据库名称数组,然后使用

ForEach-Object
为每个数据库创建另一个
/SET
语句数组。将
/SET
语句连接到单个字符串中,并在执行时使用多个
DTEXEC
语句连接到
/SET
命令。

$dbs = @("DATABASE.INC.DB","DATABASE.INC.XY","DATABASE.INC.ABC");
$sets = $dbs | ForEach-Object {"/SET `"\Package.Connection[$_].Properties[Password];$($secretpwd)`""};
$joinSets = $sets -join " ";

DTEXEC /FILE "./$ProcessName.dtsx" /CONFIGFILE "$ScriptDirectory\config\$env\$ProcessName.dtsConfig" /MAXCONCURRENT " -1 " /CHECKPOINTING OFF /CONSOLELOG SM /REPORTING EWCDI /SET $joinSets > $SSISLog
##Write-Host "DTEXEC /FILE `"./$ProcessName.dtsx`" /CONFIGFILE `"$ScriptDirectory\config\$env\$ProcessName.dtsConfig`" /MAXCONCURRENT `" -1 `" /CHECKPOINTING OFF /CONSOLELOG SM /REPORTING EWCDI /SET $joinSets > $SSISLog"
© www.soinside.com 2019 - 2024. All rights reserved.