Sql-Server

執行嵌入在 SSIS 或 TSQL 中的 Powershell 程式碼,而不是在外部文件中

  • December 5, 2018

有沒有一種方法可以在 SSIS 或 T-SQL 中嵌入 powershell 程式碼,而無需將程式碼保存在外部文件 *.ps1 中?我們知道 SSIS/Tsql 可以執行 powershell,但是程式碼似乎總是保存在其他地方。我們希望 Powershell 程式碼嵌入在 SSIS 包或 t-sql 儲存過程中,然後可以執行。

Dbas 的時間問題,設置文件共享文件夾,然後將這些 powershell 文件部署到我們的 Dev、QA、Prod 環境中(我們有多個伺服器),這可以減輕一些 Devops 過程。

  1. T-sql 路由可能使用 xp_cmdshell 這可能是安全問題,不確定是否屬實。xp_cmdshell 是否有安全的方法或 T-SQL 區域中完全不同的路線?

  2. 下面的文章解釋了在 SSIS 中執行 Powershell,但是它正在呼叫另一個文件。我們可以在 SSIS 中嵌入程式碼並執行 powershell 嗎?

https://blogs.msdn.microsoft.com/ssis/2017/01/26/run-powershell-scripts-in-ssis/

最後,我正在嘗試執行工作流並行過程。 Powershell 在數據庫中並行執行儲存過程

Workflow TestRunParallelExecute
{
   $ServerName = "localhost"
   $DatabaseName = "testrun"
   $Procedure_Query = "select name from sys.procedures"
   $Procedure_List = (Invoke-Sqlcmd -Server $ServerName -Database $DatabaseName -Query $Procedure_Query)

   ForEach -Parallel ($Procedure in $Procedure_List.Name)
   {
        Invoke-Sqlcmd -Server $ServerName -Database $DatabaseName -Query $Procedure 
   }
}
TestRunParallelExecute
cls

如果您選擇使用xp_cmdshell來呼叫您的工作流程,請參閱此答案以獲取指導(**tl;dr:**用空格替換所有換行符)。

如果您想使用 SSIS 執行過程任務在powershell.exe 引用文件的情況下進行呼叫,您可以使用現有的指導,但您可以-F D:\myScript.ps1Process>Arguments對話框中放置“”,而不是放置一個要執行的臨時腳本(使用 測試-C 'hello' | Out-File C:\temp\foo.txt)-儘管我確信對於這種方法的實際實施,有一個注意事項和陷阱的列表。

您還可以創建一個Powershell SQL 代理作業步驟臨時按計劃執行它。

引用自:https://dba.stackexchange.com/questions/223273