在 SQL Server Agent 中執行 Windows PowerShell 步驟
適用於:SQL Server Azure SQL Database Azure Synapse Analytics Analytics Platform System (PDW)
使用 SQL Server Agent 在排程時間執行 SQL Server PowerShell 指令碼。
注意
有兩個 SQL Server PowerShell 模組:SqlServer 和 SQLPS。
SqlServer 模組是要使用的最新 PowerShell 模組。
SQLPS 模組隨附於 SQL Server 安裝 (用於回溯相容性),但不再更新。
SqlServer 模組包含 SQLPS 中 Cmdlet 的更新版本,且加入新的 Cmdlet 以支援 SQL 最新功能。
從 PowerShell 資源庫安裝 SqlServer 模組。
如需詳細資訊,請參閱 SQL Server PowerShell。
從 SQL Server 2019 開始,可停用 SQLPS。 請在 PowerShell 類型作業步驟的第一行上新增 #NOSQLPS
,這會阻止 SQL Agent 自動載入 SQLPS 模組。 現在 SQL Agent 作業會執行電腦上所安裝的 PowerShell 版本,之後就可使用任何其他您喜歡的 PowerShell 模組。
若要在 SQL Agent 作業步驟中使用 SqlServer 模組,則可將此程式碼放在指令碼的前兩行。
#NOSQLPS
Import-Module -Name SqlServer
從 SQL Server Agent 執行 PowerShell
SQL Server Agent 作業步驟有幾種類型。 每一種類型都與實作特定環境的子系統相關,例如複寫代理程式或命令提示字元環境。 您可以編寫 Windows PowerShell 指令碼,然後使用 SQL Server Agent 在排程時間執行的作業內包含這些指令碼,或是用來回應 SQL Server 事件。 Windows PowerShell 指令碼可透過使用命令提示字元作業步驟或 PowerShell 作業步驟加以執行。
使用 PowerShell 作業步驟讓 SQL Server Agent 子系統執行 sqlps 公用程式,此公用程式會啟動 PowerShell 並匯入 sqlps 模組。 如果您正在執行 SQL Server 2019 或更新版本,建議您在 SQL Agent 作業步驟中使用 SqlServer 模組。
使用命令提示字元作業步驟執行 PowerShell.exe,並指定匯入 sqlps 模組的指令碼。
請注意記憶體耗用量
搭配 sqlps 模組執行 PowerShell 的每個 SQL Server Agent 作業步驟,都會啟動大約耗用 20 MB 記憶體的處理序。 執行大量的並行 Windows PowerShell 作業步驟可能會對效能造成負面影響。
建立 PowerShell 作業步驟
建立 PowerShell 作業步驟
展開 [SQL Server Agent],建立新作業或以滑鼠右鍵按一下現有作業,然後選取 [屬性]。 如需建立作業的詳細資訊,請參閱< 建立作業>。
在 [作業屬性] 對話方塊中,選取 [步驟] 頁面,然後選取 [新增]。
在 [新增作業步驟] 對話方塊中,輸入一個作業 步驟名稱。
在 [類型] 清單中,選取 [PowerShell]。
在 [執行身分] 清單中,選取具有作業將會使用之認證的 Proxy 帳戶。
在 [命令] 方塊中,輸入將為作業步驟執行的 PowerShell 指令碼語法。 或者,選取 [開啟],然後選取包含指令碼語法的檔案。
選取 [進階] 頁面以設定下列作業步驟選項:作業步驟成功或失敗時要採取的動作、SQL Server Agent 應嘗試執行作業步驟的次數,以及重試的頻率。
建立命令提示字元作業步驟
建立 CmdExec 作業步驟
展開 [SQL Server Agent],建立新作業或以滑鼠右鍵按一下現有作業,然後選取 [屬性]。 如需建立作業的詳細資訊,請參閱< 建立作業>。
在 [作業屬性] 對話方塊中,選取 [步驟] 頁面,然後選取 [新增]。
在 [新增作業步驟] 對話方塊中,輸入一個作業 步驟名稱。
在 [類型] 清單中,選擇 [作業系統 (CmdExec)] 。
在 [執行身分] 清單中,選取具有作業將會使用之認證的 Proxy 帳戶。 根據預設,CmdExec 作業步驟會以 SQL Server Agent 服務帳戶的身分執行。
在 [成功命令的處理序結束碼] 方塊中,輸入介於 0 到 999999 之間的值。
在 [命令] 方塊中,從內含指定執行 PowerShell 指令碼之參數的 PowerShell.exe 開始輸入命令。 這些範例類似於從 Windows 命令提示字元執行 PowerShell 命令的語法。 如需所有可能的語法選項,請參閱
PowerShell.exe -?
。- 範例 1:執行簡單的 Cmdlet。
PowerShell.exe -Command "Get-Date"
- 範例 2:透過 SQLCmd.exe 對目前伺服器執行查詢 (此範例會使用 SQL Agent Token 取代)。
PowerShell.exe -Command "sqlcmd.exe -S $(ESCAPE_NONE(SRVR)) -Q 'SELECT @@VERSION'"
- 範例 3:使用 PowerShell 7.0 (必須安裝在伺服器上) 的可執行檔名稱
pwsh.exe
執行 PowerShell 指令碼。 請注意,此指令碼的路徑會是 SQL Agent 執行所在伺服器的本機路徑。PWSH.exe -ExecutionPolicy RemoteSigned -File X:\MyScripts\script001.ps1
- 範例 1:執行簡單的 Cmdlet。
選取 [進階] 頁面以設定作業步驟選項,例如:作業步驟成功或失敗時要採取的動作、SQL Server Agent 應嘗試執行作業步驟的次數,以及可供 SQL Server Agent 寫入作業步驟輸出的檔案。 只有 系統管理員 (sysadmin) 固定伺服器角色的成員,可以將作業步驟輸出寫入作業系統檔案。
另請參閱
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應