尝试列出资源组和位置

Trying to list the resource groups and locations

我正在尝试仅根据 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

它returns下面格式的结果

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

但我想要这种格式

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

我怎样才能做到这一点?谁能帮帮忙

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

$Name=$ResourceGroup.ResourceGroupName

以上代码让 PowerShell 通过从数组 $ResourceGroup 的所有元素中收集 属性 ResourceGroupName 的值来创建一个数组。这就是为什么你得到像 {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-ObjectPSResourceGroupGet-AzResourceGroup 编辑的每个 PSResourceGroup 元素创建一个新对象,仅包含给定的属性。

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