在 SQL Server Agent 中執行 Windows PowerShell 步驟

適用於:SQL Server Not supported. Azure SQL Database Azure Synapse Analytics Analytics Platform System (PDW)

使用 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 事件。 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 作業步驟

  1. 展開 [SQL Server Agent],建立新作業或以滑鼠右鍵按一下現有作業,然後選取 [屬性]。 如需建立作業的詳細資訊,請參閱< 建立作業>。

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

  3. [新增作業步驟] 對話方塊中,輸入一個作業 步驟名稱

  4. 在 [類型] 清單中,選取 [PowerShell]。

  5. [執行身分] 清單中,選取具有作業將會使用之認證的 Proxy 帳戶。

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

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

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

建立 CmdExec 作業步驟

  1. 展開 [SQL Server Agent],建立新作業或以滑鼠右鍵按一下現有作業,然後選取 [屬性]。 如需建立作業的詳細資訊,請參閱< 建立作業>。

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

  3. [新增作業步驟] 對話方塊中,輸入一個作業 步驟名稱

  4. 在 [類型] 清單中,選擇 [作業系統 (CmdExec)] 。

  5. [執行身分] 清單中,選取具有作業將會使用之認證的 Proxy 帳戶。 根據預設,CmdExec 作業步驟會以 SQL Server Agent 服務帳戶的身分執行。

  6. [成功命令的處理序結束碼] 方塊中,輸入介於 0 到 999999 之間的值。

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

另請參閱