Как экспортировать VMData из Azure через несколько подписок - PullRequest
0 голосов
/ 12 февраля 2019

Мне удалось экспортировать VMData из одной подписки Azure, используя приведенный ниже код.

$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 голосов
/ 12 февраля 2019

Я думаю, что здесь происходит, вы перезаписываете свою переменную на каждом проходе (а последний проход, как оказалось, не имеет vms).поэтому вам нужно добавить к нему, а не переписать его.определите его перед циклом:

$vmOutput = @()

, а затем добавьте к нему внутри цикла

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

final:

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