Azure 自動化中的 Runbook 執行

Azure 自動化中的程式自動化可讓您建立和管理 PowerShell、PowerShell 工作流程和圖形化 Runbook。 如需詳細資訊,請參閱 Azure 自動化 Runbook

自動化會根據內部定義的邏輯來執行 Runbook。 如果 Runbook 中斷,則會在開頭重新開機。 此行為會要求您撰寫 Runbook,以支援在發生暫時性問題時重新開機。

在 Azure 自動化啟動 Runbook 會建立作業,這是 Runbook 的單一執行實例。 每個作業都會透過連線至您的 Azure 訂用帳戶來存取 Azure 資源。 如果可從公用雲端存取這些資源,則此作業只能存取資料中心內的資源。

Azure 自動化指派背景工作角色,以在 Runbook 執行期間執行每個作業。 雖然背景工作角色是由許多自動化帳戶共用,但來自不同自動化帳戶的工作會彼此隔離。 您無法控制哪些背景工作角色服務您的作業要求。

當您在 Azure 入口網站 中檢視 Runbook 清單時,會顯示每個 Runbook 已啟動的每個作業狀態。 Azure 自動化最多 30 天會儲存作業記錄。

下圖顯示 PowerShell Runbook、 PowerShell 工作流程 Runbook 和 圖形化 Runbook 的 Runbook 作業生命週期 。

Job Statuses - PowerShell Workflow

注意

如需檢視或刪除個人資料的相關資訊,請參閱 GDPR 的 Azure 資料主體要求。 如需 GDPR 的詳細資訊,請參閱 服務信任入口 網站的 Microsoft 信任中心和 GDPR 一節的 GDPR 一節。

Runbook 執行環境

Azure 自動化中的 Runbook 可以在 Azure 沙箱或 混合式 Runbook 背景工作 角色上執行。

當 Runbook 的設計目的是要針對 Azure 中的資源進行驗證和執行時,它們會在 Azure 沙箱中執行。 Azure 自動化指派背景工作角色,以在沙箱中的 Runbook 執行期間執行每個作業。 雖然背景工作角色是由許多自動化帳戶共用,但來自不同自動化帳戶的工作會彼此隔離。 使用相同沙箱的作業會受到沙箱的資源限制所系結。 Azure 沙箱環境不支援互動式作業。 它可防止存取所有跨進程 COM 伺服器,而且不支援在 Runbook 中對 Win32 提供者進行 WMI 呼叫 。  只有在 Windows 混合式 Runbook 背景工作角色上執行 Runbook,才支援這些案例。

您也可以使用 混合式 Runbook 背景工作 角色直接在裝載角色的電腦上,針對環境中的本機資源執行 Runbook。 Azure 自動化儲存和管理 Runbook,然後將這些 Runbook 傳遞給一或多部指派的電腦。

在 Azure 儲存體 Azure 金鑰保存庫 Azure SQL 上 啟用Azure 防火牆會封鎖對這些服務的 Azure 自動化 Runbook 存取。 即使啟用允許受信任Microsoft 服務的防火牆例外狀況,存取也會遭到封鎖,因為自動化不是受信任服務清單的一部分。 啟用防火牆時,只能使用混合式 Runbook 背景工作角色和 虛擬網路服務端點 進行存取。

注意

  • 若要在 Linux 混合式 Runbook 背景工作角色上執行,您的腳本必須經過簽署,並據以設定背景工作角色。 或者, 必須關閉 簽章驗證。
  • Runbook 執行不應相依于沙箱的時區。

下表列出一些 Runbook 執行工作,其中列出每個 Runbook 的建議執行環境。

Task 建議 備註
與 Azure 資源整合 Azure 沙箱 裝載在 Azure 中,驗證更簡單。 如果您在 Azure VM 上使用混合式 Runbook 背景工作角色,您可以使用 Runbook 驗證搭配受控識別
取得管理 Azure 資源的最佳效能 Azure 沙箱 腳本會在相同環境中執行,且延遲較少。
將營運成本降至最低 Azure 沙箱 沒有計算額外負荷,也不需要 VM。
執行長時間執行的腳本 Hybrid Runbook Worker Azure 沙箱具有 資源限制
與本機服務互動 Hybrid Runbook Worker 直接存取主機電腦或其他雲端環境或內部部署環境中的資源。
需要協力廠商軟體和可執行檔 Hybrid Runbook Worker 您可以管理作業系統,而且可以安裝軟體。
使用 Runbook 監視檔案或資料夾 Hybrid Runbook Worker 在混合式 Runbook 背景工作角色上使用監看員工作
執行需要大量資源的腳本 Hybrid Runbook Worker Azure 沙箱具有 資源限制
使用具有特定需求的模組 Hybrid Runbook Worker 一些範例包括:
WinSCP - winscp.exe
IIS 管理的相依性 - 啟用或管理 IIS 的相依性
使用安裝程式安裝模組 Hybrid Runbook Worker 沙箱的模組必須支援複製。
使用需要與 4.7.2 不同的 .NET Framework 版本的 Runbook 或模組 Hybrid Runbook Worker Azure 沙箱支援 .NET Framework 4.7.2,不支援升級至不同的版本。
執行需要提高許可權的腳本 Hybrid Runbook Worker 沙箱不允許提高許可權。 使用混合式 Runbook 背景工作角色時,您可以關閉 UAC,並在執行需要提高許可權的命令時使用 Invoke-Command
執行需要存取 Windows Management Instrumentation 的腳本 (WMI) Hybrid Runbook Worker 在雲端沙箱中執行的作業無法存取 WMI 提供者。

沙箱中的暫存儲存體

如果您需要在 Runbook 邏輯中建立暫存檔,您可以在 Azure 沙箱中針對在 Azure 中執行的 Runbook 使用 Temp 資料夾 (也就是 $env:TEMP )。 唯一的限制是您無法使用超過 1 GB 的磁碟空間,也就是每個沙箱的配額。 使用 PowerShell 工作流程時,此案例可能會造成問題,因為 PowerShell 工作流程使用檢查點,而且腳本可以在不同的沙箱中重試。

透過混合式沙箱,您可以根據混合式 Runbook 背景工作角色上的儲存體可用性使用 C:\temp 。 不過,根據 Azure VM 建議,您不應該在 Windows 或 Linux 上使用暫存磁片 來保存需要保存的資料。

資源

您的 Runbook 必須包含邏輯 來處理資源 ,例如 VM、網路和資源。 資源會系結至 Azure 訂用帳戶,而且 Runbook 需要適當的認證才能存取任何資源。 如需處理 Runbook 中資源的範例,請參閱 處理資源

安全性

Azure 自動化會使用 適用於雲端的 Microsoft Defender 來提供資源的安全性,並在 Linux 系統中偵測入侵。 不論資源是否在 Azure 中,您工作負載都提供安全性。 請參閱 Azure 自動化 中的驗證簡介。

適用於雲端的 Defender會在 VM 上對可以執行任何腳本或已簽署或未簽署的使用者設定條件約束。 如果您是具有 VM 根存取權的使用者,您必須明確設定具有數位簽章的電腦,或將其關閉。 否則,您只能在建立自動化帳戶並啟用適當的功能之後,執行腳本來套用作業系統更新。

訂用帳戶

Azure 訂 用帳戶 是與 Microsoft 簽訂的合約,以使用一或多個雲端式服務,並向您收取費用。 針對Azure 自動化,每個訂用帳戶都會連結到Azure 自動化帳戶,而且您可以在 帳戶中建立多個訂 用帳戶。

認證

不論 Azure 或協力廠商系統,Runbook 都需要適當的 認證 才能存取任何資源。 這些認證會儲存在Azure 自動化、金鑰保存庫等中。

Azure 監視器

Azure 自動化利用 用來監視其機器作業的 Azure 監視器 。 作業需要 Log Analytics 工作區和 Log Analytics 代理程式

適用于 Windows 的 Log Analytics 代理程式

適用于 Windows Log Analytics 代理程式可與 Azure 監視器搭配運作,以管理 Windows VM 和實體電腦。 機器可以在 Azure 或非 Azure 環境中執行,例如本機資料中心。

注意

Windows 的 Log Analytics 代理程式先前稱為 Microsoft Monitoring Agent (MMA)。

適用于 Linux 的 Log Analytics 代理程式

適用于 Linux Log Analytics 代理程式的運作方式與 Windows 的代理程式類似,但會將 Linux 電腦連線到 Azure 監視器。 代理程式會與執行需要根許可權之命令的特定服務帳戶一起安裝。 如需詳細資訊,請參閱 服務帳戶

Log Analytics 代理程式記錄位於 /var/opt/microsoft/omsagent/log/omsagent.log

Runbook 權限

Runbook 需要透過認證向 Azure 驗證的許可權。 請參閱 Azure 自動化驗證概觀

模組

Azure 自動化包含下列 PowerShell 模組:

  • Orchestrator.AssetManagement.Cmdlet - 包含數個內部 Cmdlet,只有在您在 Azure 沙箱環境中或在 Windows 混合式 Runbook 背景工作角色上執行 Runbook 時才可使用。 這些 Cmdlet 的設計目的是代替 Azure PowerShell Cmdlet,用來與自動化帳戶資源互動。
  • Az.Automation - 建議的 PowerShell 模組,可與取代 AzureRM 自動化模組的Azure 自動化互動。 當您建立自動化帳戶且需要手動匯入時,不會自動包含 Az.Automation 模組。
  • AzureRM.Automation - 當您建立自動化帳戶時,預設會安裝 。

此外,也支援可安裝的模組,以 Runbook 和 DSC 設定所需的 Cmdlet 為基礎。 如需 Runbook 和 DSC 組態可用的模組詳細資料,請參閱 管理Azure 自動化 中的模組。

憑證

Azure 自動化使用 憑證 向 Azure 進行驗證,或將它們新增至 Azure 或協力廠商資源。 憑證會安全地儲存,以供 Runbook 和 DSC 組態存取。

您的 Runbook 可以使用自我簽署憑證,這些憑證不是由憑證授權單位單位 (CA) 簽署。 請參閱建立新的憑證

工作

Azure 自動化支援從相同自動化帳戶執行作業的環境。 單一 Runbook 可以一次執行許多作業。 您同時執行的作業越多,就愈常分派到相同的沙箱。 最多 10 個作業可以在沙箱中執行。 當其中未執行任何作業時,將會移除沙箱;因此,不應該用來儲存檔案。

在相同沙箱進程中執行的作業可能會彼此影響。 其中一個範例是執行 Disconnect-AzAccount Cmdlet。 執行此 Cmdlet 會中斷共用沙箱程式中每個 Runbook 作業的連線。 如需使用此案例的範例,請參閱 防止並行作業

注意

從在 Azure 沙箱中執行的 Runbook 啟動的 PowerShell 作業可能無法以完整的 PowerShell 語言模式 執行。

作業狀態

下表描述作業可能的狀態。 您可以檢視所有 Runbook 作業的狀態摘要,或鑽研Azure 入口網站中特定 Runbook 作業的詳細資料。 您也可以設定與 Log Analytics 工作區的整合,以轉送 Runbook 作業狀態和作業串流。 如需與 Azure 監視器記錄整合的詳細資訊,請參閱 將作業狀態和作業串流從自動化轉送至 Azure 監視器記錄 。 如需 在 Runbook 中使用狀態的範例,請參閱取得作業狀態

狀態 描述
啟動 正在啟動作業。
已完成 作業已順利完成。
已失敗 圖形化或 PowerShell 工作流程 Runbook 無法編譯。 PowerShell Runbook 無法啟動或作業發生例外狀況。 請參閱 runbook 類型 Azure 自動化。
失敗,正在等候資源 作業失敗,因為它達到 公平共用 限制三次,並且每次從相同的檢查點或 Runbook 的開頭啟動。
佇列 作業正在等候自動化背景工作角色上的資源可供使用,以便啟動它。
繼續中 系統在暫停作業後會繼續工作。
執行中 作業正在執行。
執行中,等候資源 作業已卸載,因為它達到公平共用限制。 它很快就會從其最後一個檢查點繼續。
啟動中 作業已指派給背景工作角色,而且系統正在啟動它。
已停止 作業在完成前由使用者停止作業。
正在停止 系統正在停止作業。
已暫停 僅適用于圖形化和 PowerShell 工作流程 Runbook 。 作業已由使用者、系統或是 Runbook 中的命令暫停。 如果 Runbook 沒有檢查點,它會從頭開始。 如果它有檢查點,它可以再次啟動,並從其最後一個檢查點繼續。 系統只會在發生例外狀況時暫停 Runbook。 根據預設, ErrorActionPreference 變數會設定為 [繼續],表示作業會在錯誤時繼續執行。 如果喜好設定變數設定為 [停止],作業就會在錯誤時暫停。
暫停中 僅適用于圖形化和 PowerShell 工作流程 Runbook 。 系統會嘗試在使用者的要求下暫停作業。 Runbook 必須達到其下一個檢查點才能暫停。 如果它已經通過其最後一個檢查點,它就會完成,然後才能暫停。

事件記錄

在 Azure 自動化中執行 Runbook 時會將詳細資料寫入自動化帳戶的活動記錄中。 如需使用記錄的詳細資訊,請參閱 從活動記錄擷取詳細資料

例外狀況

本節說明在 Runbook 中處理例外狀況或間歇性問題的一些方式。 例如 WebSocket 例外狀況。 正確的例外狀況處理可防止暫時性網路失敗導致 Runbook 失敗。

ErrorActionPreference

ErrorActionPreference 變數會決定 PowerShell 如何回應非終止錯誤。 終止錯誤一律會終止,而且不會受到 ErrorActionPreference 影響。

當 Runbook 使用 ErrorActionPreference 時,通常非終止錯誤,例如 PathNotFound Get-ChildItem Cmdlet 會停止 Runbook 完成。 下列範例示範 ErrorActionPreference 的用法。 當腳本停止時,最後 的 Write-Output 命令永遠不會執行。

$ErrorActionPreference = 'Stop'
Get-ChildItem -path nofile.txt
Write-Output "This message will not show"

最後嘗試 Catch

Try Catch Finally 用於 PowerShell 腳本中,以處理終止錯誤。 腳本可以使用這個機制來攔截特定例外狀況或一般例外狀況。 catch語句應該用來追蹤或嘗試處理錯誤。 下列範例會嘗試下載不存在的檔案。 它會攔截例外狀況, System.Net.WebException 並傳回任何其他例外狀況的最後一個值。

try
{
   $wc = new-object System.Net.WebClient
   $wc.DownloadFile("http://www.contoso.com/MyDoc.doc")
}
catch [System.Net.WebException]
{
    "Unable to download MyDoc.doc from http://www.contoso.com."
}
catch
{
    "An error occurred that could not be resolved."
}

Throw

Throw 可用來產生終止錯誤。 在 Runbook 中定義您自己的邏輯時,此機制很有用。 如果腳本符合應該停止的準則,則可以使用 throw 語句來停止。 下列範例會使用此語句來顯示必要的函式參數。

function Get-ContosoFiles
{
  param ($path = $(throw "The Path parameter is required."))
  Get-ChildItem -Path $path\*.txt -recurse
}

錯誤

您的 Runbook 必須處理錯誤。 Azure 自動化支援兩種類型的 PowerShell 錯誤、終止和非終止。

終止錯誤會在發生 Runbook 時停止執行。 Runbook 會停止作業狀態為 [失敗]。

非終止錯誤可讓腳本在發生之後繼續。 非終止錯誤的範例是 Runbook 使用 Get-ChildItem Cmdlet 與不存在路徑時所發生的錯誤。 PowerShell 看到路徑不存在、擲回錯誤,並繼續下一個資料夾。 在此情況下,錯誤不會將 Runbook 作業狀態設定為 [失敗],甚至可能已完成作業。 若要強制 Runbook 在非終止錯誤時停止,您可以在 ErrorAction Stop Cmdlet 上使用 。

呼叫進程

在 Azure 沙箱中執行的 Runbook 不支援呼叫進程,例如可執行檔( .exe 檔案)或子進程。 這是因為 Azure 沙箱是在可能無法存取所有基礎 API 的容器中執行的共用進程。 針對需要協力廠商軟體或轉包處理呼叫的案例,您應該在混合式 Runbook 背景工作 角色上 執行 Runbook。

裝置和應用程式特性

Azure 沙箱中的 Runbook 作業無法存取任何裝置或應用程式特性。 用來查詢 Windows 效能計量的最常見 API 是 WMI,其中一些常見的計量是記憶體和 CPU 使用量。 不過,使用 API 並不重要,因為雲端中執行的作業無法存取 Web 型企業管理 (WBEM) 的 Microsoft 實作。 此平臺是以 Common Information Model (CIM) 為基礎,提供定義裝置和應用程式特性的業界標準。

Webhooks

例如,Azure DevOps Services 和 GitHub 的外部服務可以在 Azure 自動化中啟動 Runbook。 若要執行這種類型的啟動,服務會透過單一 HTTP 要求使用 Webhook 。 使用 Webhook 可讓 Runbook 啟動,而不需要實作完整的Azure 自動化功能。

共用的資源

若要在雲端中的所有 Runbook 之間共用資源,Azure 會使用稱為公平共用的概念。 使用公平共用時,Azure 會暫時卸載或停止任何已執行超過三小時的作業。 PowerShell Runbook 和 Python Runbook 的 作業會停止且未重新開機,而作業狀態會變成 [已停止]。

對於長時間執行的Azure 自動化工作,建議使用 混合式 Runbook 背景工作 角色。 混合式 Runbook 背景工作角色不受公平共用的限制,而且不會限制 Runbook 的執行時間長度。 其他作業 限制 同時適用于 Azure 沙箱和混合式 Runbook 背景工作角色。 雖然混合式 Runbook 背景工作角色不受三小時公平共用限制的限制,但您應該開發 Runbook,以在支援從非預期的本機基礎結構問題重新開機的背景工作角色上執行。

另一個選項是使用子 Runbook 優化 Runbook。 例如,您的 Runbook 可能會在數個資源上迴圈執行相同的函式,例如,在數個資料庫上使用資料庫作業。 您可以將此函式 移至子 Runbook ,並使用 Start-AzAutomationRunbook 來呼叫 Runbook 。 子 Runbook 會在不同的進程中平行執行。

使用子 Runbook 可減少父 Runbook 完成的總時間量。 您的 Runbook 可以使用 Get-AzAutomationJob Cmdlet 來檢查子 Runbook 的作業狀態,如果子系完成之後仍有更多作業。

下一步