使用指令碼透過 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 命令列執行該指令碼:
.\myScript.ps1
PowerShell 技術
PowerShell 包含程式設計語言常用的功能。 您可以定義變數、使用分支和迴圈、擷取命令列參數、撰寫函式及新增註解等。 針對您側重的指令碼,您需要三個主要功能:變數、循環和參數。
變數
在 PowerShell,變數使用貨幣符號 ($
) 宣告,並使用等號 (=
) 運算子指派值。 例如:
$location = 'eastus'
若要判斷儲存於變數的值,請使用 $
前置詞及其名稱:
$location
變數可以保留物件。 例如,下列定義將 $adminCredential
變數設定為 Get-Credential
Cmdlet 傳回的物件:
$adminCredential = Get-Credential
迴圈
PowerShell 有數個迴圈結構,包括 For
、Foreach
、Do-Until
、Do-While
和 While
。 Foreach
迴圈這個選擇,適合必須在集合中一組值執行迴圈的案例。
$items = 'web','app','sql'
foreach ($item in $items) {
$item
}
參數
建立 PowerShell 指令碼時,可以將參數新增至指令碼,然後在執行指令碼時指定這些參數的值。 例如:
.\setupEnvironment.ps1 -Name 'web','app','sql' -Location eastus
在指令碼中,可以將值擷取到變數。 在這個範例中,參數為 Name 和 Location:
param (
[string[]]$Name,
[string]$Location
)
您可以將這些參數當成輸入值,並使用迴圈根據指定的參數建立一組 VM。 此方法保留指令碼的通用性,避免重複使用相同的程式碼。
結合技術
PowerShell 語言功能和 Azure PowerShell Cmdlet 的組合,可為您提供將 Azure 自動化所需的所有工具。 在 CRM 範例,您可以使用參數化指令碼和迴圈建立多個 Linux VM,簡化流程。 此指令碼讓您以單一步驟執行複雜的作業。
範例指令碼
以下範例指令碼示範如何使用變數、迴圈和參數建立多個 VM:
param (
[string[]]$Name = 'web','app','sql',
[string]$ResourceGroupName,
[string]$Location = 'eastus'
)
$adminCredential = Get-Credential
foreach ($vm in $Name) {
$azVmParams = @{
ResourceGroupName = $ResourceGroupName
Name = $vm
Credential = $adminCredential
Location = $Location
Image = 'Canonical:0001-com-ubuntu-server-jammy:22_04-lts:latest'
OpenPorts = 22
PublicIpAddressName = $vm
}
New-AzVM @azVmParams
}
執行指令碼
將指令碼儲存為 CreateVMs.ps1
,然後從 PowerShell 命令列執行,同時提供必要的參數:
.\CreateVMs.ps1 -ResourceGroupName <resource-group-name>
使用此指令碼,您可以在不同的資源群組高效建立多個 VM,將重複的工作自動化,確保整個 Azure 環境一致。