分享方式:


在 SQL Server Agent 中執行 Windows PowerShell 步驟

使用 SQL Server Agent 在排程時間執行 SQL Server PowerShell 腳本。

注意

有兩個 SQL Server PowerShell 模組;SqlServerSQLPS

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 事件。 您可以使用命令提示字元作業步驟或 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 作業步驟

  1. 展開 SQL Server Agent、建立新作業或以滑鼠右鍵按兩下現有的作業,然後選取 [屬性]。 如需建立作業的詳細資訊,請參閱 /sql/ssms/agent/create-jobs。

  2. 在 [作業屬性] 對話框中,選取 [步驟] 頁面,然後選取 [[新增]。

  3. 在 [新增作業步驟] 對話框中,輸入作業 步驟名稱

  4. 在 [類型] 列表中,選取 [PowerShell]。

  5. 在 [執行身分 列表中,選取具有作業將使用認證的 Proxy 帳戶。

  6. 在 [命令] 方塊中,輸入將針對作業步驟執行的 PowerShell 腳本語法。 或者,選取 [[開啟],然後選取包含腳本語法的檔案。

  7. 選取 [進階] 頁面來設定下列作業步驟選項:如果作業步驟成功或失敗,SQL Server Agent 應該嘗試執行作業步驟的次數,以及應該重試嘗試的頻率。

建立命令提示字元作業步驟

建立 CmdExec 作業步驟

  1. 展開 SQL Server Agent、建立新作業或以滑鼠右鍵按兩下現有的作業,然後選取 [屬性]。 如需建立作業的詳細資訊,請參閱 /sql/ssms/agent/create-jobs。

  2. 在 [作業屬性] 對話框中,選取 [步驟] 頁面,然後選取 [[新增]。

  3. 在 [新增作業步驟] 對話框中,輸入作業 步驟名稱

  4. 在 [類型] 清單中,選擇 [操作系統 [CmdExec]

  5. 在 [執行身分 列表中,選取具有作業將使用認證的 Proxy 帳戶。 根據預設,CmdExec 作業步驟會在 SQL Server Agent 服務帳戶的內容下執行。

  6. 在 [成功命令 方塊的 [處理結束代碼] 方塊中,輸入從 0 到 999999 的值。

  7. 在 [命令] 方塊中,輸入以 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
      
  8. 選取 [進階] 頁面來設定作業步驟選項,例如:作業步驟成功或失敗時要採取的動作、SQL Server Agent 應該嘗試執行作業步驟的次數,以及 SQL Server Agent 可以寫入作業步驟輸出的檔案。 只有 系統管理員 固定伺服器角色的成員才能將作業步驟輸出寫入作業系統檔案。