使用 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 和创建虚拟机的示例脚本:
创建脚本后,可通过传递文件名(名称前面有一个句点用于当前目录,还有一个反斜杠),从 PowerShell 命令行执行该脚本:
.\myScript.ps1
PowerShell 技术
PowerShell 包括编程语言中常见的功能。 可以定义变量、使用分支和循环、捕获命令行参数、编写函数、添加注释等。 对于要关注的脚本,需要 3 个关键特性:变量、循环和参数。
变量
在 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 环境中的一致性。