如何跨多个订阅从 Azure 导出 VMData

How to export VMData from azure across multiple subscriptions

我已经能够使用下面的代码从单个 Azure 订阅中导出 VMData。

$VMs = Get-AzVM
$vmOutput = $VMs | ForEach-Object { 
    [PSCustomObject]@{
        "VM Name" = $_.Name
    "VM Profile" = $_.HardwareProfile.VmSize
        "VM Type" = $_.StorageProfile.osDisk.osType
        "VM Location" = $_.Location
        "VM Resource Group Name" = $_.ResourceGroupName -join ','
    }
}
$vmOutput | export-csv C:\Azure\VMdata.csv -delimiter ";" -force -notypeinformation

但是,当使用下面的代码尝试从多个订阅中提取数据时,没有得到任何结果。

$azuresubs = Get-AzSubscription
$azureSubs.foreach{
    Select-AzSubscription $_
$VMs = Get-AzVM
$vmOutput = $VMs | ForEach-Object { 
    [PSCustomObject]@{
        "VM Name" = $_.Name
    "VM Profile" = $_.HardwareProfile.VmSize
        "VM Type" = $_.StorageProfile.osDisk.osType
        "VM Location" = $_.Location
        "VM Resource Group Name" = $_.ResourceGroupName -join ','
        }
    }
}
$vmOutput | export-csv C:\Azure\VMdata.csv -delimiter ";" -force -notypeinformation

作为 powershell 的新手,我确信上面的语法不正确,因此非常感谢任何帮助。

谢谢

我想这里发生的事情是你在每次传递时覆盖你的变量(最后一次传递恰好没有虚拟机)。所以你需要附加到它,而不是覆盖它。在循环之前定义它:

$vmOutput = @()

然后在循环中附加到它

$vmOutput += $Vms | bla-bla-bla

决赛:

$vmOutput = @()
$azuresubs = Get-AzSubscription
$azureSubs.foreach{
    Select-AzSubscription $_
    $VMs = Get-AzVM
    $vmOutput += $VMs | ForEach-Object { 
    [PSCustomObject]@{
        xxx
        }
    }
}