求基于标签值的Azure多订阅快照自动创建及7天删除脚本与入门教程
多订阅环境下基于标签创建Azure快照并自动7天后删除的PowerShell脚本
以下是满足需求的PowerShell脚本,支持多订阅环境,基于指定标签筛选磁盘创建快照,并自动清理7天前到期的快照:
# 安装Az模块(首次运行需要) Install-Module -Name Az -AllowClobber -Force -Scope CurrentUser # 登录Azure账户(非自动化环境需手动登录) Connect-AzAccount # 定义配置变量 $targetTagKey = "SnapshotEnabled" # 标识需创建快照的磁盘的标签键 $targetTagValue = "True" # 标签对应的值 $retentionDays = 7 # 快照保留天数,到期自动删除 $snapshotSuffix = "_AutoSnapshot" # 快照名称后缀,便于识别 # 遍历所有有权限的订阅 Get-AzSubscription | ForEach-Object { Write-Host "`n=== 切换到订阅: $($_.Name) (ID: $($_.Id)) ===" Select-AzSubscription -SubscriptionObject $_ | Out-Null # 获取当前订阅中符合标签条件的磁盘 $targetDisks = Get-AzDisk | Where-Object { $_.Tags.ContainsKey($targetTagKey) -and $_.Tags[$targetTagKey] -eq $targetTagValue } # 为符合条件的磁盘创建快照 foreach ($disk in $targetDisks) { $snapshotName = "$($disk.Name)$snapshotSuffix" $snapshotConfig = New-AzSnapshotConfig ` -SourceUri $disk.Id ` -CreateOption Copy ` -Location $disk.Location # 给快照添加标签:记录原磁盘信息和到期日期 $expiryDate = (Get-Date).AddDays($retentionDays).ToString("yyyy-MM-dd") $snapshotTags = $disk.Tags.Clone() $snapshotTags["OriginalDiskName"] = $disk.Name $snapshotTags["SnapshotExpiryDate"] = $expiryDate Write-Host "正在为磁盘 $($disk.Name) 创建快照: $snapshotName" New-AzSnapshot ` -Snapshot $snapshotConfig ` -SnapshotName $snapshotName ` -ResourceGroupName $disk.ResourceGroupName ` -Tag $snapshotTags | Out-Null } # 清理当前订阅中到期的快照 Write-Host "`n=== 清理当前订阅中到期的快照 ===" $currentDate = Get-Date $allSnapshots = Get-AzSnapshot foreach ($snapshot in $allSnapshots) { # 优先按快照的到期标签判断 if ($snapshot.Tags.ContainsKey("SnapshotExpiryDate")) { $expiryDate = [DateTime]$snapshot.Tags["SnapshotExpiryDate"] if ($expiryDate -lt $currentDate) { Write-Host "删除过期快照: $($snapshot.Name) (到期日期: $expiryDate)" Remove-AzSnapshot ` -ResourceGroupName $snapshot.ResourceGroupName ` -SnapshotName $snapshot.Name ` -Force | Out-Null } } # 兼容无标签的旧快照,按创建时间计算保留期 elseif ($snapshot.TimeCreated.AddDays($retentionDays) -lt $currentDate) { Write-Host "删除旧快照: $($snapshot.Name) (创建时间: $($snapshot.TimeCreated))" Remove-AzSnapshot ` -ResourceGroupName $snapshot.ResourceGroupName ` -SnapshotName $snapshot.Name ` -Force | Out-Null } } }
关键功能说明
- 多订阅支持:通过
Get-AzSubscription遍历所有有权限的订阅,使用Select-AzSubscription切换上下文 - 标签筛选逻辑:仅对带有指定键值对标签(示例为
SnapshotEnabled=True)的磁盘创建快照,可修改$targetTagKey和$targetTagValue适配你的标签规则 - 自动过期机制:创建快照时添加
SnapshotExpiryDate标签记录到期时间,清理时优先按该标签判断;同时兼容无标签的旧快照,按创建时间计算保留期 - 可配置参数:所有核心参数都集中在脚本开头,便于根据实际需求调整
使用提示
- 首次运行需确保当前用户具备目标订阅的磁盘访问权限,以及快照的创建/删除权限
- 若要自动化执行,可将脚本部署到Azure自动化账户,配置每日定时触发器
- 建议先在测试环境验证脚本功能,避免误删资源
内容的提问来源于stack exchange,提问作者Madhur Asati
相关产品推荐
相关产品推荐

