如何使用PowerShell跨Azure订阅列出资源组?

aamkag61  于 2023-03-03  发布在  Shell
关注(0)|答案(2)|浏览(149)

我正在编写PowerShell脚本以跨Azure订阅列出资源组。

Get-AzureRmSubscription | 
select -ExpandProperty name |
 % { 
     Get-AzureRmResourceGroup | select -ExpandProperty resourcegroupname
 }

这段代码很有效。它返回这样的结果。

Resource group 1     
Resource group 2
Resource group 3

我如何调整代码以获得如下所示的输出?

Subscription 1,Resource group 1     
Subscription 1,Resource group 2
Subscription 2,Resource group 3

太感谢你了。

svmlkihl

svmlkihl1#

除了@mklement的精彩回答之外,下面是您如何使用最新的Azure PowerShell Az module而不是AzureRM来完成这一任务:

Get-AzSubscription | ForEach-Object {
    $subscriptionName = $_.Name
    Set-AzContext -SubscriptionId $_.SubscriptionId
    (Get-AzResourceGroup).ResourceGroupName | ForEach-Object {     
        [PSCustomObject] @{
            Subscription = $subscriptionName
            ResourceGroup = $_
        }
    }
}

要更改为活动订阅,我们可以使用Set-AzContext更改上下文,并从Get-AzSubscription传递SubscriptionId。还应该可以使用Set-AzContext -Subscription $subscriptionName传递订阅名称。
如果要对Az模块运行AzureRM命令,可以运行Enable-AzureRmAlias,这允许您对Az模块使用AzureRM前缀。

nwwlzxa7

nwwlzxa72#

注:

  • 答案使用来自 * 废弃 * AzureRM模块的cmdlet,该模块已被跨平台Az模块取代-请参见this announcement
Get-AzureRmSubscription | 
 % { 
   $subscrName = $_.Name
   Select-AzureSubscription -Current -SubscriptionName $name
   (Get-AzureRmResourceGroup).resourcegroupname | % {     
     [pscustomobject] @{
       Subscription = $subscrName
       ResourceGroup = $_
     }
   }
 }

注意:上面的操作改变了会话的当前订阅。在你的真实代码中,你可能想在以后恢复以前的当前订阅。
上面的输出带有.Subscription.ResourceGroup属性的自定义对象;如果您确实只想输出字符串,请使用:
"$name,$_"

相关问题