Я пытаюсь запустить несколько SSIS-пакетов, установленных в базе данных удаленно, у меня есть доступ к базе данных и вы можете увидеть SSISDB и его каталог. Проблема, с которой я столкнулся, заключается в том, как лучше всего выполнить один из пакетов в проекте, который у меня есть в каталоге.Scripting SSIS Пакеты, запускаемые удаленно с помощью PowerShell
Я знаю, что DTExec является вариантом, если я использую команду invoke, но не хочу этого делать, если это возможно, временами может быть несколько соединений, и я видел сбои в определенных ящиках с несколькими выполнениями 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
Хотя, когда я запускаю это, я часто получаю только возврат, без значений.