在 SQL Server Agent 中執行 Windows PowerShell 步驟
使用 SQL Server Agent 在排程時間執行 SQL Server PowerShell 腳本。
注意
有兩個 SQL Server PowerShell 模組;SqlServer 和 SQLPS。
SqlServer 模組是要使用的目前 PowerShell 模組。
SQLPS 模組
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 事件。 您可以使用命令提示字元作業步驟或 PowerShell 作業步驟來執行 Windows 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 、建立新作業或以滑鼠右鍵按兩下現有的作業,然後選取 [屬性]。 如需建立作業的詳細資訊,請參閱 /sql/ssms/agent/create-jobs。 在 [作業屬性] 對話框中,選取 [步驟] 頁面,然後選取 [[新增]。
在 [新增作業步驟] 對話框中,輸入作業 步驟名稱。
在 [類型] 列表中,選取 [PowerShell]。
在 [執行身分 列表中,選取具有作業將使用認證的 Proxy 帳戶。
在 [命令] 方塊中,輸入將針對作業步驟執行的 PowerShell 腳本語法。 或者,選取 [[開啟],然後選取包含腳本語法的檔案。
選取 [進階] 頁面來設定下列作業步驟選項:如果作業步驟成功或失敗,SQL Server Agent 應該嘗試執行作業步驟的次數,以及應該重試嘗試的頻率。
建立命令提示字元作業步驟
建立 CmdExec 作業步驟
展開
SQL Server Agent 、建立新作業或以滑鼠右鍵按兩下現有的作業,然後選取 [屬性]。 如需建立作業的詳細資訊,請參閱 /sql/ssms/agent/create-jobs。 在 [作業屬性] 對話框中,選取 [步驟] 頁面,然後選取 [[新增]。
在 [新增作業步驟] 對話框中,輸入作業 步驟名稱。
在 [類型] 清單中,選擇 [操作系統 [CmdExec]。
在 [執行身分 列表中,選取具有作業將使用認證的 Proxy 帳戶。 根據預設,CmdExec 作業步驟會在 SQL Server Agent 服務帳戶的內容下執行。
在 [成功命令 方塊的 [
處理結束代碼] 方塊中,輸入從 0 到 999999 的值。 在 [命令] 方塊中,輸入以 PowerShell.exe 開頭的命令,並指定要執行的 PowerShell 腳本的參數。 這些範例類似於從 Windows 命令提示字元執行 PowerShell 命令的語法。 如需所有可能的語法選項,請參閱
PowerShell.exe -?
。範例 1:執行簡單的 Cmdlet。
PowerShell.exe -Command "Get-Date"
範例 2:透過 SQLCmd.exe 對目前伺服器執行查詢(此範例使用 SQL Agent 令牌取代)。
PowerShell.exe -Command "sqlcmd.exe -S $(ESCAPE_NONE(SRVR)) -Q 'SELECT @@VERSION'"
範例 3:執行 PowerShell 腳本(使用
pwsh.exe
,也就是必須在伺服器上安裝的 PowerShell 7.0 中可執行檔名稱)。 腳本的路徑是 SQL Agent 執行所在伺服器的本機路徑。PWSH.exe -ExecutionPolicy RemoteSigned -File X:\MyScripts\script001.ps1
選取 [進階] 頁面來設定作業步驟選項,例如:作業步驟成功或失敗時要採取的動作、SQL Server Agent 應該嘗試執行作業步驟的次數,以及 SQL Server Agent 可以寫入作業步驟輸出的檔案。 只有 系統管理員 固定伺服器角色的成員才能將作業步驟輸出寫入作業系統檔案。
相關內容
- SQL Server PowerShell
- 使用 PowerShell
SQL Server Agent