首页 > 解决方案 > 尝试列出资源组和位置

问题描述

我正在尝试仅基于 vnet 位置中可用的位置列出 Azure 资源组。这是我的代码。

$AllVnet=Get-AzVirtualNetwork
    $SelectVnet=$AllVnet | Select-Object -Property Name,ResourceGroupName,Location
    $vnetloc=$SelectVnet.Location  
    $ResourceGroupList=@()
    foreach($loc in $vnetloc)
    {
      
      $ResourceGroup=Get-AzResourceGroup -Location $loc
      $Name=$ResourceGroup.ResourceGroupName
      $Loc=$ResourceGroup.Location
      $VMObject = New-Object PSObject
      $VMObject | Add-Member -MemberType NoteProperty -Name "Name" -Value $Name
      $VMObject | Add-Member -MemberType NoteProperty -Name "Location" -Value $Loc
      $ResourceGroupList += $VMObject
    } 
    $ResourceGroupList

它以以下格式返回结果

Name                                                           Location
----                                                           --------
AZRWUSRG1                                                      westus
{NWRG, AZREUS####, AZREU###, AZREUSLSSTO###} {eastus, eastus, eastus, eastus…}

但我想要这种格式

Name                                                           Location
----                                                           --------
AZRWUSRG1                                                      westus
NWRG                                                           eastus
AZREUS####                                                     eastus
AZREUSLSSTO###                                                 eastus

我怎样才能做到这一点?任何人都可以请帮忙。

标签: powershellazure-powershell

解决方案


Get-AzResourceGroup可以返回多个类型的对象PSResourceGroup。在这种情况下$ResourceGroup将是一个数组。

$Name=$ResourceGroup.ResourceGroupName

ResourceGroupName上面的代码让 PowerShell 通过从数组的所有元素中收集属性值来创建一个数组$ResourceGroup。这就是为什么你得到像{NWRG, AZREUS####, AZREU###, AZREUSLSSTO###}.

代码可以像这样固定并大大简化:

$AllVnet=Get-AzVirtualNetwork
$SelectVnet=$AllVnet | Select-Object -Property Name,ResourceGroupName,Location
$vnetloc=$SelectVnet.Location  

$ResourceGroupList = foreach($loc in $vnetloc)
{      
    Get-AzResourceGroup -Location $loc | Select-Object Name, Location
} 

使用Select-Object我们为从返回的每个PSResourceGroup元素创建一个新对象Get-AzResourceGroup,仅包含给定的属性。

由于我们已将foreach输出分配给一个变量,PowerShell 会自动捕获变量中循环体的所有输出,当有多个元素时,它将是一个数组。


推荐阅读