共用方式為


教學課程:在自動化中建立 PowerShell 工作流程 Runbook

本教學課程將逐步引導您在 Azure 自動化中建立 PowerShell 工作流程 Runbook。 PowerShell 工作流程 Runbook 是以 Windows PowerShell 工作流程為基礎的文字 Runbook。 您可以使用 Azure 入口網站的文字編輯器來建立和編輯 Runbook 的程式碼。

注意

本文適用於 PowerShell 5.1;PowerShell 7.1 (預覽),而 PowerShell 7.2 不支援工作流程。

在本教學課程中,您會了解如何:

  • 建立 PowerShell 工作流程 Runbook
  • 測試和發佈 Runbook
  • 執行和追蹤 Runbook 作業的狀態
  • 加入驗證來管理 Azure 資源
  • 更新 Runbook 參數以啟動 Azure 虛擬機器

如果您沒有 Azure 訂用帳戶,請在開始前建立免費帳戶

必要條件

將權限指派給受控識別

將權限指派給適當的受控識別,以允許其停止虛擬機器。 Runbook 可以使用自動化帳戶的系統指派受控識別或使用者指派的受控識別。 本文提供了將權限指派給每個身分識別的步驟。 下列步驟是使用 Azure 入口網站。 如果您偏好使用 PowerShell,請參閱使用 Azure PowerShell 指派 Azure 角色

  1. 登入 Azure 入口網站,然後瀏覽至您的自動化帳戶。

  2. 在 [帳戶設定] 底下,選取 [身分識別 (預覽)]

  3. 從 [系統指派] 索引標籤的 [權限] 下方,選取 [Azure 角色指派] 以開啟 [Azure 角色指派] 頁面。

    Selecting Azure role assignments in portal.

  4. 選取 [+ 新增角色指派 (預覽)],以開啟 [新增角色指派 (預覽)] 頁面。

    Add role assignments in portal.

  5. 選取適當值。

    屬性 Description
    範圍 範圍是角色指派套用至其中的一組資源。 從下拉式清單中,選取 [資源群組]
    訂用帳戶 此欄位應該會自動填入您的訂用帳戶。
    資源群組 從下拉式清單中,選取要授與身分識別權限的資源群組。
    角色 從下拉式清單中,選取 [DevTest Labs 使用者]
  6. 選取 [儲存],然後關閉 [Azure 角色指派] 頁面,返回 [系統指派] 索引標籤。

  7. 選取 [使用者指派的] 索引標籤。

  8. 從清單中選取使用者指派的受控識別,以開啟 [受控識別] 頁面。

    Selecting user-assigned managed identity in portal.

  9. 記下 [用戶端識別碼] 以供稍後使用。

    Showing Client ID for managed identity in portal

  10. 從左側功能表中,選取 [Azure 角色指派],然後選取 [+ 新增角色指派 (預覽)],以開啟 [新增角色指派 (預覽)] 頁面。

    Add role assignments in portal for user-assigned identity.

  11. 選取適當值。

    屬性 Description
    範圍 從下拉式清單中,選取 [資源群組]
    訂用帳戶 此欄位應該會自動填入您的訂用帳戶。
    資源群組 從下拉式清單中,選取要授與身分識別權限的資源群組。
    角色 從下拉式清單中,選取 [DevTest Labs 使用者]
  12. 選取 [儲存],然後關閉 [Azure 角色指派] 頁面,返回 [使用者指派] 索引標籤。

建立新的 Runbook

從建立簡單的 PowerShell 工作流程 Runbook 開始。 Windows PowerShell 工作流程的其中一個優勢就是可平行執行一組命令,而不需要像一般指令碼一樣依序執行。

注意

隨著版本的發行,Runbook 建立在 Azure 入口網站中有了新的體驗。 當您選取 [Runbook] 刀鋒視窗 > [建立 Runbook] 時,新頁面 [建立 Runbook] 會開啟,其中包含適用的選項。

  1. 在您開啟的自動化帳戶頁面中,選取 [程序自動化] 下的 [Runbook]

    Create PowerShell workflow runbook from portal

  2. 選取 [+ 建立 Runbook]

    1. 為 Runbook 命名。 例如,測試。
    2. 從 [Runbook 類型] 下拉式清單中,選取 [PowerShell 工作流程]
    3. 從 [執行階段版本] 下拉式清單中,選取 [5.1]
    4. 輸入適用的 [描述]
    5. 選取 建立

    PowerShell workflow runbook options from portal

將程式碼加入 Runbook

您可以直接將程式碼輸入到 Runbook 中,或從程式庫控制項選取 Cmdlet、Runbook 和資產,並利用任何相關的參數將其新增至 Runbook。 在本教學課程中,您會直接在 Runbook 中輸入程式碼。

您的 Runbook 目前是空白的,只有必要的 Workflow 關鍵字、Runbook 名稱以及括住整個工作流程的大括弧。

Workflow MyFirstRunbook-Workflow
{
}
  1. 您可以使用 Parallel 關鍵字以透過多個可同時執行的命令來建立指令碼區塊。 在大括號「之間」輸入下列程式碼:

    Parallel {
         Write-Output "Parallel"
         Get-Date
         Start-Sleep -s 3
         Get-Date
     }
    
    Write-Output " `r`n"
    Write-Output "Non-Parallel"
    Get-Date
    Start-Sleep -s 3
    Get-Date
    
  2. 選取 [儲存] 來儲存 Runbook。

測試 Runbook

在您發佈 Runbook 之前,為了使其可用於生產環境,您應該進行測試以確定其可正常運作。 測試 Runbook 時,系統會執行其「草稿」版本並可讓您以互動方式檢視其輸出。

  1. 選取 [測試窗格] 來開啟 [測試] 頁面。

  2. 選取 [開始] 以啟動測試。 隨即會建立 Runbook 工作,並在窗格中顯示其狀態。

    作業狀態一開始為 [已排入佇列],表示該作業正在等候雲端中的 Runbook 背景工作可供使用。 當背景工作腳色宣告該作業時,狀態會變成 [啟動中]。 最後,當 Runbook 實際開始執行時,狀態會變成 [執行中]。

  3. 當 Runbook 作業完成時,[測試] 頁面會顯示其輸出。 輸出看起來應類似下圖:

    PowerShell workflow runbook parallel output

    檢閱輸出。 Parallel 區塊中的一切項目 (包括 Start-Sleep 命令) 同時執行。 Parallel 區塊外的相同命令循依執行,如不同的日期時間戳記所示。

  4. 關閉 [測試] 頁面以返回畫布。

發佈和啟動 Runbook

您所建立的 Runbook 仍處於草稿模式。 您必須先將其發佈,才能在生產環境中加以執行。 當您發佈 Runbook 時,您會使用草稿版本覆寫現有的已發佈版本。 在此情況下,因為您剛剛建立 Runbook,所以還沒有已發佈的版本。

  1. 選取 [發佈] 來發佈 Runbook,然後在系統提示時選取 [是]

  2. [狀態] 欄位現在會顯示 [已發佈]。 檢閱頂端的選項,這些選項可讓您立即啟動 Runbook、排程未來啟動時間,或建立 Webhook,以便透過 HTTP 呼叫啟動該 Runbook。 選取 [開始],然後在系統提示時選取 [是],以啟動 Runbook。

    PowerShell workflow runbook overview page

  3. [作業] 頁面會針對已建立的 Runbook 作業開啟。 在此情況下,讓頁面保持開啟狀態,以便您可以監看作業的進度。 [狀態] 欄位符合您在測試 Runbook 時看到的狀態。

    Screenshot of the runbook Job page.

  4. 一旦 Runbook 狀態顯示已完成,請選取 [輸出]。 此輸出看起來應類似測試輸出。

  5. 關閉 [作業] 頁面,以返回 Runbook [概觀] 頁面。

  6. 在 [資源] 下,選取 [作業]。 此頁面會列出 Runbook 建立的所有作業。 由於您只執行一次作業,所以應該只會看到一項作業列出。

  7. 選取作業,以開啟您啟動 Runbook 時所檢視的相同 [作業] 頁面。 使用此頁面來檢視針對 Runbook 建立的任何作業詳細資料。 關閉 [作業] 頁面,以返回 Runbook [概觀] 頁面。

加入驗證來管理 Azure 資源

您已測試並發行您的 Runbook,但是到目前為止,它似乎並不實用。 您想要讓它管理 Azure 資源。 除非使用訂用帳戶的認證進行驗證,否則無法這麼做。 Runbook 會使用自動化帳戶系統指派的受控識別向 Azure 進行驗證,以針對 VM 執行管理動作。 Runbook 可以輕鬆地修改為使用使用者指派的受控識別。

  1. 選取 [概觀] ,然後選取 [編輯] 以開啟文字編輯器。

  2. 將現有的程式碼取代為下列程式碼:

    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 變數。

  3. 如果您想要 Runbook 以系統指派的受控識別來執行,請將程式碼保持原狀。 如果您偏好使用使用者指派的受控識別,則:

    1. 從第 9 行移除 Connect-AzAccount -Identity
    2. 將其取代為 Connect-AzAccount -Identity -AccountId <ClientId>,然後
    3. 輸入您稍早取得的 [用戶端識別碼]。
  4. 選取 [儲存],然後選取 [測試] 窗格。

  5. 選取 [開始] 以啟動測試。 當測試完成後,您應該會從帳戶收到如同以下顯示基本資訊的輸出。 此動作可確認認證有效。

    Basic information that confirms credentials.

  6. 關閉 [測試] 頁面以返回畫布。

新增程式碼以啟動虛擬機器

由於您的 Runbook 正在向 Azure 訂用帳戶進行驗證,所以您可以管理資源。 新增一個命令以啟動虛擬機器。 您可以在您的 Azure 訂用帳戶中挑選任何 VM,而現在您會在 Runbook 中將該名稱硬式編碼。

  1. 將以下程式碼新增為緊鄰右大括號之前的最後一行。 將 VMName 取代為 VM 的實際名稱。

    Start-AzVM -Name "VMName" -ResourceGroupName $resourceGroup -DefaultProfile $AzureContext
    
  2. 測試 Runbook 並確認 VM 已啟動。 接著,返回畫布。

將輸入參數新增至 Runbook

您的 Runbook 目前會啟動您已在 Runbook 中硬式編碼的 VM。 如果您可以在 Runbook 啟動時指定 VM,其會更加實用。 將輸入參數新增至 Runbook,以提供該功能。

  1. 將第 3 行 $resourceGroup = "resourceGroupName" 取代為下列內容:

    Param(
        [string]$resourceGroup,
        [string]$VMName
    )
    
  2. 將前一個 Start-AzVM 命令取代為下列內容:

    Start-AzVM -Name $VMName -ResourceGroupName $resourceGroup -DefaultProfile $AzureContext
    
  3. 測試 Runbook 並確認 VM 已啟動。 接著,返回畫布。

同時管理多個 VM

您可以使用 ForEach -Parallel 建構函式同時處理集合中每個項目的命令。 修訂程式碼,以便 Runbook 現在將:

  • 接受虛擬機器名稱的集合、
  • 接受參數以停止或啟動虛擬機器,以及
  • 針對所有虛擬機器平行執行動作
  1. 將現有程式碼全部取代為下列內容:

    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'."
       }
       }
    
  2. 如果您想要 Runbook 以系統指派的受控識別來執行,請將程式碼保持原狀。 如果您偏好使用使用者指派的受控識別,則:

    1. 從第 9 行移除 Connect-AzAccount -Identity
    2. 將其取代為 Connect-AzAccount -Identity -AccountId <ClientId>,然後
    3. 輸入您稍早取得的 [用戶端識別碼]。
  3. 依序選取 [儲存]、[發佈],然後在出現提示時選取 [是]

  4. 從 [概觀] 頁面中,選取 [啟動]

  5. 填入參數,然後選取 [確定]

    參數 描述
    RESOURCEGROUP 輸入 VM 資源群組的名稱。
    VM 使用下列語法輸入虛擬機器的名稱:["VM1","VM2","VM3"]
    動作 輸入 stopstart
  6. 瀏覽至您的虛擬機器清單,然後每隔幾秒鐘重新整理一次頁面。 觀察每個 VM 的動作是否平行發生。 若沒有 -Parallel 關鍵字,動作會循序執行。 雖然 VM 將會循序啟動,但每個 VM 可能會根據每個 VM 的特性,以稍微不同的時間到達 [執行中] 階段。

清除資源

如果您不打算繼續使用此 Runbook,請使用下列步驟將其刪除:

  1. 瀏覽至您的自動化帳戶。
  2. 在 [程序自動化] 下方,選取 [Runbook]
  3. 選取 Runbook。
  4. 從 Runbook [概觀] 頁面中,選取 [刪除]

下一步

在本教學課程中,您已建立 PowerShell 工作流程 Runbook。 若要查看 Python 3 Runbook,請參閱: