如何从多个订阅的Azure中导出VMData

时间:2019-02-12 11:18:12

标签: azure powershell virtual-machine subscription

我已经能够使用下面的代码从单个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来说,这是我的新手,我确定上面的语法是不正确的,因此非常感谢您的协助。

谢谢

1 个答案:

答案 0 :(得分:1)

我认为这里发生的事情是您在每次通过时都覆盖了变量(而最后一次恰好没有vms)。因此您需要附加它,而不是覆盖它。在循环之前定义它:

$vmOutput = @()

然后在循环内附加到它

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

最终:

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