Если вы просто хотите просмотреть все свои подписки и перечислить все виртуальные машины, вы можете сделать следующее:
Get-AzureRMSubscription | ForEach-Object {
$sub = Select-AzureRMSubscription $_
Write-Output "Collecting VM facts from subscription $($sub.Subscription.Id)"
Get-AzureRmVM
}
Проблема с вашей попыткой состоит в том, что вы получаете все подписки (Get-AzureRmSubscription
) во время каждой итерации l oop независимо от значений, содержащихся в $azureSubscriptionID
. Чтобы исправить ваш код, вам нужно запустить Get-AzureRMSubscription -SubscriptionId $subs
или Select-AzureRMSubscription -SubscriptionId $subs
.
Если вы хотите продолжить обработку с собранными вами данными, я бы рассмотрел какой-то альтернативный подход, когда вы явно нацелены на известные подписки.
$azureSubscriptionIDs = "xxxxx-xxxxx-xxxxx-xxxx","yyyyy-yyyyy-yyyyy-yyyy","zzzzz-zzzzz-zzzzz-zzzz"
# $vms is an array of custom objects
# each custom object contains a subscription ID and the associated VMs Names
$vms = foreach ($sub in $azureSubscriptionIDs) {
$null = Select-AzureRMSubscription -SubscriptionId $sub
$subvms = Get-AzureRmVM | Select -Expand Name
$sub | Select @{n='Subscription';e={$_}},@{n='VMs';e={$subvms}}
}
# You can access the subscription ID now with the Subscription property
# You can access the VMs Names with the VMs property
# List all vms under subscription 'xxxxx-xxxxx-xxxxx-xxxx'
$vms | Where Subscription -eq 'xxxxx-xxxxx-xxxxx-xxxx' | Select -Expand VMs
# List all vms for each subscription with a custom console message
foreach ($sub in $vms) {
Write-Output "Here are all the VMs for subscription $($sub.Subscription)"
$sub.VMs
}