使用 Azure PowerShell 通过脚本创建 Azure 资源

已完成

手动执行复杂或重复的任务可能非常耗时且容易出错。 组织更倾向于实现这些任务的自动化,以降低成本并避免出错。

自动化在客户关系管理 (CRM) 示例中至关重要,在该示例中,你在需要持续删除和重新创建的多个 Linux 虚拟机 (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 和创建虚拟机的示例脚本:

VS Code 屏幕截图,上面有一个 PowerShell 脚本用于在 Azure 中创建虚拟机。

创建脚本后,可通过传递文件名(名称前面有一个句点用于当前目录,还有一个反斜杠),从 PowerShell 命令行执行该脚本:

.\myScript.ps1

PowerShell 技术

PowerShell 包括编程语言中常见的功能。 可以定义变量、使用分支和循环、捕获命令行参数、编写函数、添加注释等。 对于要关注的脚本,需要 3 个关键特性:变量、循环和参数。

变量

在 PowerShell 中,变量使用美元符号 ($) 进行声明,使用等号 (=) 运算符进行赋值。 例如:

$location = 'eastus'

若要确定变量中存储的值,请使用 $ 前缀及其名称:

$location

变量可以保存对象。 例如,以下定义将 $adminCredential 变量设置为 Get-Credential cmdlet 返回的对象:

$adminCredential = Get-Credential

循环

PowerShell 具有多个循环结构,包括 ForForeachDo-UntilDo-WhileWhile。 对于需要对集合中的一组值执行循环的方案,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 环境中的一致性。