2014-11-04 57 views
1

我试图运行一些远程安装在数据库上的SSIS包,我可以访问数据库并可以看到SSISDB及其目录。我遇到的问题是如何最好地执行我在目录中的项目中的一个包。使用PowerShell远程运行脚本的SSIS包

我知道DTExec是一个选项,如果我使用invoke-command但不想这样做,如果可能的话,有时可能会有多个连接,并且在某些具有多次DTExec执行的盒子上看到崩溃。

我已经尝试从包中获取执行脚本,并将其放入PowerShell中,并将其用作SQL查询,但我长期担心这种方法是如果软件包发生变化,我需要跟踪这一点。

我想要的最简单的解决方案就是按名称执行软件包,如果我需要更新比每个软件包的整个SQL脚本更简单的名称。这个更简单的解决方案是可能的吗?最好的方法是什么?到目前为止,我没有把这个作为执行SMO的运气。我试过的东西是这样的:

[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.SMO") | out-null 
$SMOserver = New-Object ('Microsoft.SqlServer.Management.Smo.Server') -argumentlist $Server 

#This sets the connection to mixed-mode authentication 
$SMOserver.ConnectionContext.LoginSecure=$true 

$query = @" this is where my execute SQL goes from the SSIS catalog "@ 

$db2 = New-Object ('Microsoft.SqlServer.Management.Smo.Database') 
$db2 = $SMOserver.Databases[$database] 
Write-Host "My Query: $query" 
$results2 = $db2.ExecuteNonQuery($query) 
Write-Host "Results: " $results2 

虽然当我运行这个我经常只是得到一个回报,没有值。

回答

0

最终通过使用sqlcmd并将各个任务放入作业中,然后使用sqlcmd执行作业来解决此问题。

用用户名和密码使用

所以:

$ jobOutput = SQLCMD -S $服务器-U $用户名-p密码$ -Q“EXEC msdb.dbo.sp_start_job @ JOB_NAME = N'$作业名“”

这使得访问和提供我对结果有一定的输出,