如何用PowerShell汇总多Azure订阅的注册提供者到单个文件
解决Azure多订阅已注册提供者信息汇总到单个文件的问题
问题核心是你把ArrayList的初始化放在了循环内部,每次循环都会新建空数组,导致之前订阅的数据无法保留。只需把数组初始化移到循环外,就能让所有订阅的结果存入同一个集合,最后统一导出。
修改步骤
- 将
ArrayList的创建语句移到循环开始前,确保所有订阅数据都存入同一个全局数组 - 循环内获取当前订阅的已注册提供者后,将数据添加到全局数组
- 所有循环执行完毕后,一次性将数组内容写入目标文件
修改后的示例脚本
# 初始化全局数组,存储所有订阅的已注册提供者信息 $allRegisteredProviders = New-Object System.Collections.ArrayList # 遍历指定目录下的YAML文件 Get-ChildItem -Path "./landingZones/landingzone1/settings/dev/*.yaml" | ForEach-Object { # 读取YAML中的订阅名称(根据实际YAML字段调整,这里假设字段为subscriptionName) $yamlContent = Get-Content $_.FullName | ConvertFrom-Yaml $subscriptionName = $yamlContent.subscriptionName # 切换到目标订阅 Select-AzSubscription -SubscriptionName $subscriptionName # 获取当前订阅的已注册提供者信息 $currentProviders = Get-AzResourceProvider -ListAvailable | Select-Object ProviderNamespace, RegistrationState # 可选:给每条记录加上订阅名称,方便区分来源 # $currentProviders = Get-AzResourceProvider -ListAvailable | Select-Object @{Name='SubscriptionName';Expression={$subscriptionName}}, ProviderNamespace, RegistrationState # 将当前订阅的信息添加到全局数组 $null = $allRegisteredProviders.AddRange($currentProviders) } # 将所有订阅的信息写入文件(-Append可选,需要覆盖旧文件则去掉) $allRegisteredProviders | Out-File -Path "./registered_providers.txt" -Encoding UTF8
注意事项
- 若未安装YAML解析模块,先执行
Install-Module -Name powershell-yaml安装 $null = $allRegisteredProviders.AddRange(...)是为了避免AddRange返回的索引值输出到控制台
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

