2014-11-04 80 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'$作業名「」

這使得訪問和提供我對結果有一定的輸出,