Azure订阅标签提取问题:PowerShell脚本无法获取标签名与值
问题原因
原脚本无法获取TagName和TagValue的核心问题是:遍历标签枚举项时,未正确引用当前项的属性——直接使用$Name、$Value会被视为未定义变量,导致输出空值。
修正后的单个订阅脚本
# 获取目标订阅详情 $subscriptionDetails = Get-AzSubscription | Select-Object -First 1 if ($subscriptionDetails.Tags) { $tagData = $subscriptionDetails.Tags.GetEnumerator() | ForEach-Object { [PSCustomObject]@{ SubscriptionId = $subscriptionDetails.Id SubscriptionName = $subscriptionDetails.Name TagName = $_.Name # 引用当前标签项的Name属性 TagValue = $_.Value # 引用当前标签项的Value属性 } } } else { # 处理无标签的订阅 $tagData = [PSCustomObject]@{ SubscriptionId = $subscriptionDetails.Id SubscriptionName = $subscriptionDetails.Name TagName = $null TagValue = $null } } $tagData | Export-Csv -Path "SingleSubscriptionTags.csv" -NoTypeInformation
多订阅批量提取脚本
针对105个Azure订阅的批量标签提取需求,遍历所有订阅并统一收集数据:
# 首次运行需登录Azure账号,注释取消即可 # Connect-AzAccount # 初始化空数组存储所有订阅标签数据 $allTagData = @() # 遍历所有Azure订阅 Get-AzSubscription | ForEach-Object { $currentSub = $_ if ($currentSub.Tags) { # 遍历当前订阅的所有标签 $currentSub.Tags.GetEnumerator() | ForEach-Object { $allTagData += [PSCustomObject]@{ SubscriptionId = $currentSub.Id SubscriptionName = $currentSub.Name TagName = $_.Name TagValue = $_.Value } } } else { # 记录无标签的订阅信息 $allTagData += [PSCustomObject]@{ SubscriptionId = $currentSub.Id SubscriptionName = $currentSub.Name TagName = $null TagValue = $null } } } # 导出数据到CSV(指定UTF-8编码避免中文乱码) $allTagData | Export-Csv -Path "AllSubscriptionTags.csv" -NoTypeInformation -Encoding UTF8
关键说明
- 通过
$_.Name、$_.Value正确绑定当前遍历的标签属性,解决原脚本的空值问题。 - 增加无标签订阅的处理逻辑,避免遗漏订阅记录。
- 批量场景通过遍历所有订阅统一收集数据,最终导出为CSV文件便于后续分析。
内容的提问来源于stack exchange,提问作者Pops
相关产品推荐
相关产品推荐

