教學課程:在自動化中建立 PowerShell 工作流程 Runbook
本教學課程將逐步引導您在 Azure 自動化中建立 PowerShell 工作流程 Runbook。 PowerShell 工作流程 Runbook 是以 Windows PowerShell 工作流程為基礎的文字 Runbook。 您可以使用 Azure 入口網站的文字編輯器來建立和編輯 Runbook 的程式碼。
注意
本文僅適用於 PowerShell 5.1。 PowerShell 7+ 版本不支援工作流程,而且無法更新過期的 Runbook。 建議您使用 PowerShell 7.2 文字 Runbook 來取得進階功能,例如平行作業執行。 深入了解 PowerShell 工作流程 Runbook 的限制。
在本教學課程中,您會了解如何:
- 建立 PowerShell 工作流程 Runbook
- 測試和發佈 Runbook
- 執行和追蹤 Runbook 作業的狀態
- 加入驗證來管理 Azure 資源
- 更新 Runbook 參數以啟動 Azure 虛擬機器
如果您沒有 Azure 訂用帳戶,請在開始前建立免費帳戶。
必要條件
- Azure 自動化帳戶至少會有一個使用者指派的受控識別。 如需詳細資訊,請參閱啟用受控識別。
- Az 模組:
Az.Accounts
和Az.Compute
已匯入至自動化帳戶。 如需詳細資訊,請參閱匯入 Az 模組。 - 兩部以上 Azure 虛擬機器。 由於您停止並啟動這些機器,因此其不該是生產 VM。
- 安裝在您電腦上的 Azure Az PowerShell 模組。 若要安裝或升級,請參閱如何安裝 Azure Az PowerShell 模組。
將權限指派給受控識別
將權限指派給適當的受控識別,以允許其停止虛擬機器。 Runbook 可以使用自動化帳戶的系統指派受控識別或使用者指派的受控識別。 本文提供了將權限指派給每個身分識別的步驟。 下列步驟是使用 Azure 入口網站。 如果您偏好使用 PowerShell,請參閱使用 Azure PowerShell 指派 Azure 角色。
登入 Azure 入口網站,然後瀏覽至您的自動化帳戶。
在 [帳戶設定] 底下,選取 [身分識別 (預覽)]。
從 [系統指派] 索引標籤的 [權限] 下方,選取 [Azure 角色指派] 以開啟 [Azure 角色指派] 頁面。
選取 [+ 新增角色指派 (預覽)],以開啟 [新增角色指派 (預覽)] 頁面。
選取適當值。
屬性 Description 範圍 範圍是角色指派套用至其中的一組資源。 從下拉式清單中,選取 [資源群組]。 訂用帳戶 此欄位應該會自動填入您的訂用帳戶。 資源群組 從下拉式清單中,選取要授與身分識別權限的資源群組。 角色 從下拉式清單中,選取 [DevTest Labs 使用者]。 選取 [儲存],然後關閉 [Azure 角色指派] 頁面,返回 [系統指派] 索引標籤。
選取 [使用者指派的] 索引標籤。
從清單中選取使用者指派的受控識別,以開啟 [受控識別] 頁面。
記下 [用戶端識別碼] 以供稍後使用。
從左側功能表中,選取 [Azure 角色指派],然後選取 [+ 新增角色指派 (預覽)],以開啟 [新增角色指派 (預覽)] 頁面。
選取適當值。
屬性 Description 範圍 從下拉式清單中,選取 [資源群組]。 訂用帳戶 此欄位應該會自動填入您的訂用帳戶。 資源群組 從下拉式清單中,選取要授與身分識別權限的資源群組。 角色 從下拉式清單中,選取 [DevTest Labs 使用者]。 選取 [儲存],然後關閉 [Azure 角色指派] 頁面,返回 [使用者指派] 索引標籤。
建立新的 Runbook
從建立簡單的 PowerShell 工作流程 Runbook 開始。 Windows PowerShell 工作流程的其中一個優勢就是可平行執行一組命令,而不需要像一般指令碼一樣依序執行。
注意
隨著版本的發行,Runbook 建立在 Azure 入口網站中有了新的體驗。 當您選取 [Runbook] 刀鋒視窗 > [建立 Runbook] 時,新頁面 [建立 Runbook] 會開啟,其中包含適用的選項。
在您開啟的自動化帳戶頁面中,選取 [程序自動化] 下的 [Runbook]
選取 [+ 建立 Runbook]。
- 為 Runbook 命名。 例如,測試。
- 從 [Runbook 類型] 下拉式清單中,選取 [PowerShell 工作流程]。
- 從 [執行階段版本] 下拉式清單中,選取 [5.1]。
- 輸入適用的 [描述]。
- 選取 建立。
將程式碼加入 Runbook
您可以直接將程式碼輸入到 Runbook 中,或從程式庫控制項選取 Cmdlet、Runbook 和資產,並利用任何相關的參數將其新增至 Runbook。 在本教學課程中,您會直接在 Runbook 中輸入程式碼。
您的 Runbook 目前是空白的,只有必要的 workflow
關鍵字、Runbook 名稱以及括住整個工作流程的大括弧。
workflow MyFirstRunbook-Workflow
{
}
您可以使用
Parallel
關鍵字以透過多個可同時執行的命令來建立指令碼區塊。 在大括號「之間」輸入下列程式碼:parallel { Write-Output "Parallel" Get-Date Start-Sleep -Seconds 3 Get-Date } Write-Output " `r`n" Write-Output "Non-Parallel" Get-Date Start-Sleep -Seconds 3 Get-Date
選取 [儲存] 來儲存 Runbook。
測試 Runbook
在您發佈 Runbook 之前,為了使其可用於生產環境,您應該進行測試以確定其可正常運作。 測試 Runbook 時,系統會執行其「草稿」版本並可讓您以互動方式檢視其輸出。
選取 [測試窗格] 來開啟 [測試] 頁面。
選取 [開始] 以啟動測試。 隨即會建立 Runbook 工作,並在窗格中顯示其狀態。
作業狀態一開始為 [已排入佇列],表示該作業正在等候雲端中的 Runbook 背景工作可供使用。 當背景工作腳色宣告該作業時,狀態會變成 [啟動中]。 最後,當 Runbook 實際開始執行時,狀態會變成 [執行中]。
當 Runbook 作業完成時,[測試] 頁面會顯示其輸出。 輸出看起來應類似下圖:
檢閱輸出。
Parallel
區塊中的一切項目 (包括Start-Sleep
命令) 同時執行。Parallel
區塊外的相同命令循依執行,如不同的日期時間戳記所示。關閉 [測試] 頁面以返回畫布。
發佈和啟動 Runbook
您所建立的 Runbook 仍處於草稿模式。 您必須先將其發佈,才能在生產環境中加以執行。 當您發佈 Runbook 時,您會使用草稿版本覆寫現有的已發佈版本。 在此情況下,因為您剛剛建立 Runbook,所以還沒有已發佈的版本。
選取 [發佈] 來發佈 Runbook,然後在系統提示時選取 [是]。
[狀態] 欄位現在會顯示 [已發佈]。 檢閱頂端的選項,這些選項可讓您立即啟動 Runbook、排程未來啟動時間,或建立 Webhook,以便透過 HTTP 呼叫啟動該 Runbook。 選取 [開始],然後在系統提示時選取 [是],以啟動 Runbook。
[作業] 頁面會針對已建立的 Runbook 作業開啟。 在此情況下,讓頁面保持開啟狀態,以便您可以監看作業的進度。 [狀態] 欄位符合您在測試 Runbook 時看到的狀態。
一旦 Runbook 狀態顯示已完成,請選取 [輸出]。 此輸出看起來應類似測試輸出。
關閉 [作業] 頁面,以返回 Runbook [概觀] 頁面。
在 [資源] 下,選取 [作業]。 此頁面會列出 Runbook 建立的所有作業。 由於您只執行一次作業,所以應該只會看到一項作業列出。
選取作業,以開啟您啟動 Runbook 時所檢視的相同 [作業] 頁面。 使用此頁面來檢視針對 Runbook 建立的任何作業詳細資料。 關閉 [作業] 頁面,以返回 Runbook [概觀] 頁面。
加入驗證來管理 Azure 資源
您已測試並發行您的 Runbook,但是到目前為止,它似乎並不實用。 您想要讓它管理 Azure 資源。 除非使用訂用帳戶的認證進行驗證,否則無法這麼做。 Runbook 會使用自動化帳戶系統指派的受控識別向 Azure 進行驗證,以針對 VM 執行管理動作。 Runbook 可以輕鬆地修改為使用使用者指派的受控識別。
選取 [概觀] ,然後選取 [編輯] 以開啟文字編輯器。
將現有的程式碼取代為下列程式碼:
workflow MyFirstRunbook-Workflow { $resourceGroup = "resourceGroupName" # Ensures you do not inherit an AzContext in your runbook Disable-AzContextAutosave -Scope Process # Connect to Azure with system-assigned managed identity Connect-AzAccount -Identity # set and store context $AzureContext = Set-AzContext -SubscriptionId "<SubscriptionID>" }
使用代表資源群組的有效值來編輯
$resourceGroup
變數。如果您想要 Runbook 以系統指派的受控識別來執行,請將程式碼保持原狀。 如果您偏好使用使用者指派的受控識別,則:
- 從第 9 行移除
Connect-AzAccount -Identity
、 - 將其取代為
Connect-AzAccount -Identity -AccountId <ClientId>
,然後 - 輸入您稍早取得的 [用戶端識別碼]。
- 從第 9 行移除
選取 [儲存],然後選取 [測試] 窗格。
選取 [開始] 以啟動測試。 當測試完成後,您應該會從帳戶收到如同以下顯示基本資訊的輸出。 此動作可確認認證有效。
關閉 [測試] 頁面以返回畫布。
新增程式碼以啟動虛擬機器
由於您的 Runbook 正在向 Azure 訂用帳戶進行驗證,所以您可以管理資源。 新增一個命令以啟動虛擬機器。 您可以在您的 Azure 訂用帳戶中挑選任何 VM,而現在您會在 Runbook 中將該名稱硬式編碼。
將以下程式碼新增為緊鄰右大括號之前的最後一行。 將
VMName
取代為 VM 的實際名稱。Start-AzVM -Name "VMName" -ResourceGroupName $resourceGroup -DefaultProfile $AzureContext
測試 Runbook 並確認 VM 已啟動。 接著,返回畫布。
將輸入參數新增至 Runbook
您的 Runbook 目前會啟動您已在 Runbook 中硬式編碼的 VM。 如果您可以在 Runbook 啟動時指定 VM,其會更加實用。 將輸入參數新增至 Runbook,以提供該功能。
將第 3 行
$resourceGroup = "resourceGroupName"
取代為下列內容:Param( [string]$resourceGroup, [string]$VMName )
將前一個
Start-AzVM
命令取代為下列內容:Start-AzVM -Name $VMName -ResourceGroupName $resourceGroup -DefaultProfile $AzureContext
測試 Runbook 並確認 VM 已啟動。 接著,返回畫布。
同時管理多個 VM
您可以使用 ForEach -Parallel
建構函式同時處理集合中每個項目的命令。 修訂程式碼,以便 Runbook 現在將:
- 接受虛擬機器名稱的集合、
- 接受參數以停止或啟動虛擬機器,以及
- 針對所有虛擬機器平行執行動作
將現有程式碼全部取代為下列內容:
workflow MyFirstRunbook-Workflow { param ( [string]$resourceGroup, [string[]]$VMs, [string]$action ) # Ensures you do not inherit an AzContext in your runbook Disable-AzContextAutosave -Scope Process # Connect to Azure with system-assigned managed identity Connect-AzAccount -Identity # set and store context $AzureContext = Set-AzContext -SubscriptionId "<SubscriptionID>" # Start or stop VMs in parallel if ($action -eq "Start") { ForEach -Parallel ($vm in $VMs) { Start-AzVM -Name $vm -ResourceGroupName $resourceGroup -DefaultProfile $AzureContext } } elseif ($action -eq "Stop") { ForEach -Parallel ($vm in $VMs) { Stop-AzVM -Name $vm -ResourceGroupName $resourceGroup -DefaultProfile $AzureContext -Force } } else { Write-Output "`r`n Action not allowed. Please enter 'stop' or 'start'." } }
如果您想要 Runbook 以系統指派的受控識別來執行,請將程式碼保持原狀。 如果您偏好使用使用者指派的受控識別,則:
- 從第 9 行移除
Connect-AzAccount -Identity
、 - 將其取代為
Connect-AzAccount -Identity -AccountId <ClientId>
,然後 - 輸入您稍早取得的 [用戶端識別碼]。
- 從第 9 行移除
依序選取 [儲存]、[發佈],然後在出現提示時選取 [是]。
從 [概觀] 頁面中,選取 [啟動]。
填入參數,然後選取 [確定]。
參數 描述 RESOURCEGROUP 輸入 VM 資源群組的名稱。 VM 使用下列語法輸入虛擬機器的名稱: ["VM1","VM2","VM3"]
動作 輸入 stop
或start
。瀏覽至您的虛擬機器清單,然後每隔幾秒鐘重新整理一次頁面。 觀察每個 VM 的動作是否平行發生。 若沒有
-Parallel
關鍵字,動作會循序執行。 雖然 VM 會並行啟動,但每個 VM 可能會根據每個 VM 的特性,以略微不同的時間到達 [執行中] 階段。
清除資源
如果您不打算繼續使用此 Runbook,請使用下列步驟將其刪除:
- 瀏覽至您的自動化帳戶。
- 在 [程序自動化] 下方,選取 [Runbook]。
- 選取 Runbook。
- 從 Runbook [概觀] 頁面中,選取 [刪除]。
下一步
在本教學課程中,您已建立 PowerShell 工作流程 Runbook。 若要查看 Python 3 Runbook,請參閱: