需要更智能的环境包配置

时间:2010-06-09 16:44:19

标签: sql-server-2005 powershell ssis environment-variables registry

我正在尝试在SSIS中设置包模板,遵循Wrox Programmer to Programmer一书, SQL Server 2008 Integration Services:问题 - 设计 - 解决方案。我真的很喜欢这本书,即使它是2008年我们正在使用SQL Server 2005.我有一个工作包模板,它使用间接XML包配置来识别什么环境(本地开发人员) ,dev,QA,生产等)正在运行包。它为环境找到 SQL Server包配置

这个设置非常棒,除了最前面的环境变量外都是如此。如果软件包可以使用与我们所有其他应用程序和工具一样的使用相同的环境资源定位器,我的团队会更喜欢它,所以我们没有两个环境标记,其中包含基本相同的信息。通常我们在 HKey_Local_Machine 中查找注册表项,但注册表包配置类型只允许您查找 HKey_Current_User 注册表。

我的第一个想法是编写一个扩展了Registry类型的新的Package Configuration Type类;毕竟我们有幸写自己的自定义日志提供程序。 SSIS 超级可扩展,对吧?因此,似乎没有办法编写自己的包配置类型。

我是否还能通过某种方式从HKLM注册表项连接字符串配置我的SSIS SQL Server包配置

如果无法做到这一点,还有哪些其他解决方法?我的想法是编写一个 PowerShell 脚本,该脚本将通过从注册表中获取连接字符串来创建/修改程序包将使用的环境变量。这样仍然有两个标记,但至少它会自动维护和自动化。这种解决方法是否必要?

感谢您的时间。

1 个答案:

答案 0 :(得分:0)

所以我继续使用PowerShell路线,因为没有替代方案。

这是脚本的缩写版本,我无法显示查找connectionString变量的代码,因为它有一些私有细节但是如果你使用它作为参考,那么这些行对你的环境来说无论如何都是唯一的。

$ErrorActionPreference = "Stop";

# Open a connection to verify that the connection string works.
"Verifying connection string: $connectionString";
$oleDbConnection = New-Object System.Data.OleDb.OleDbConnection $connectionString;
$oleDbConnection.Open();
$oleDbConnection.Dispose();

# Set the environment variable
"Writing to System Environment Variable 'SSIS_CONFIG' replacing old value: $($env:SSIS_CONFIG)";
[Environment]::SetEnvironmentVariable("SSIS_CONFIG", $connectionString, "Machine");