使用指令碼透過 Azure PowerShell 建立 Azure 資源

已完成

手動執行時,複雜或重複的工作可能耗時又容易出錯。 組織寧可將這些工作自動化,以降低成本並避免錯誤。

自動化在這個客戶關係管理 (CRM) 範例是不可或缺的一環,您將在必須持續刪除並重新建立的多個 Linux 虛擬機器 (VM) 測試軟體。 相較於每次手動建立 VM,使用 PowerShell 指令碼自動建立 VM 更有效率且可靠。

除了建立 VM 這項核心作業外,您的指令碼必須符合幾項需求:

  • 建立多個 VM:使用 New-AzVM 建立多個使用唯一名稱的 VM。
  • 資源群組參數:允許指令碼接受以參數做為資源群組的名稱。

在本單元,您會學習如何撰寫和執行符合這些需求的 PowerShell 指令碼。

什麼是 PowerShell 指令碼?

PowerShell 指令碼是一個文字檔案,內含命令和控制建構。 命令是 Cmdlet 的引動過程,控制建構是 PowerShell 所支援的程式設計功能,例如迴圈、變數、參數、註解等。

PowerShell 指令碼檔案的副檔名為 .ps1。 您可以使用任何文字編輯器建立和儲存這些檔案。

提示

如果您要撰寫 PowerShell 指令碼,請考慮使用 Visual Studio Code (VS Code) 這個 Windows、Linux 和 macOS 免費支援的功能。 適用於 VS Code 的 PowerShell 延伸模組,提供語法醒目提示等功能,以及可用 Cmdlet 清單。

下列螢幕擷取畫面是 VS Code 的範例,其中包含連線 Azure 與建立虛擬機器的範例指令碼:

使用 PowerShell 指令碼在 Azure 建立虛擬機器的 VS Code 螢幕擷取畫面。

建立指令碼後,在檔案名稱前面加上代表目前目錄的點和反斜線傳遞該名稱,即可從 PowerShell 命令列執行該指令碼:

.\myScript.ps1

PowerShell 技術

PowerShell 包含程式設計語言常用的功能。 您可以定義變數、使用分支和迴圈、擷取命令列參數、撰寫函式及新增註解等。 針對您側重的指令碼,您需要三個主要功能:變數、循環和參數。

變數

在 PowerShell,變數使用貨幣符號 ($) 宣告,並使用等號 (=) 運算子指派值。 例如:

$location = 'eastus'

若要判斷儲存於變數的值,請使用 $ 前置詞及其名稱:

$location

變數可以保留物件。 例如,下列定義將 $adminCredential 變數設定為 Get-Credential Cmdlet 傳回的物件:

$adminCredential = Get-Credential

迴圈

PowerShell 有數個迴圈結構,包括 ForForeachDo-UntilDo-WhileWhileForeach 迴圈這個選擇,適合必須在集合中一組值執行迴圈的案例。

$items = 1..3
foreach ($item in $items) {
    $item
}

參數

建立 PowerShell 指令碼時,可以將參數新增至指令碼,然後在執行指令碼時指定這些參數的值。 例如:

.\setupEnvironment.ps1 -VmCount 5 -Location eastus

在指令碼中,可以將值擷取到變數。 在這個範例,參數為 VmCountLocation

param (
    [int]$VmCount,
    [string]$Location
)

您可以將這些參數當成輸入值,並使用迴圈根據指定的參數建立一組 VM。 此方法保留指令碼的通用性,避免重複使用相同的程式碼。

結合技術

PowerShell 語言功能和 Azure PowerShell Cmdlet 的組合,可為您提供將 Azure 自動化所需的所有工具。 在 CRM 範例,您可以使用參數化指令碼和迴圈建立多個 Linux VM,簡化流程。 此指令碼讓您以單一步驟執行複雜的作業。

範例指令碼

以下範例指令碼示範如何使用變數、迴圈和參數建立多個 VM:

param (
    [int]$VmCount = 3,
    [string]$ResourceGroupName,
    [string]$Location = 'eastus'
)

$adminCredential = Get-Credential

$vms = 'web','app','sql'

foreach ($vm in $vms) {
    $vmName = "testvm-$vm"

    $azVmParams = @{
        ResourceGroupName   = $ResourceGroupName
        Name                = $vmName
        Credential          = $adminCredential
        Location            = $Location
        Image               = 'Canonical:0001-com-ubuntu-server-jammy:22_04-lts:latest'
        OpenPorts           = 22
        PublicIpAddressName = $vmName
    }
    New-AzVM @azVmParams
}

執行指令碼

將指令碼儲存為 CreateVMs.ps1,然後從 PowerShell 命令列執行,同時提供必要的參數:

.\CreateVMs.ps1 -ResourceGroupName <resource-group-name>

使用此指令碼,您可以在不同的資源群組高效建立多個 VM,將重複的工作自動化,確保整個 Azure 環境一致。