You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 21:45:30