如何在 Azure PowerShell 中列出所有云服务,然后循环每个云服务以查找其中有多少个 VM

How to list all cloud services in Azure PowerShell, and then loop each cloud service to find how many VMs are in it

我想导出一个 XML 文件,其中包含所有云服务和每个云服务中的虚拟机。

我只会调用 Get-AzureVM 一次来优化处理。之后,我将使用比使用 Azure PowerShell 命令过滤更快的 PowerShell 命令进行分组和输出。

通过分组,您还可以得到标题中问题的答案:云服务中有多少虚拟机?这只是简单地从Count属性.

中得到
$allVMs = Get-AzureVM

$allVMs | Group-Object -Property ServiceName

<# Output
Count Name                      Group                                                                                                                                 
----- ----                      -----                                                                                                                                 
    2 pksttest1                 {Microsoft.WindowsAzure.Commands.ServiceManagement.Model.PersistentVMRoleListContext, Microsoft.WindowsAzure.Commands.ServiceManage...
    1 pksttest2                 {Microsoft.WindowsAzure.Commands.ServiceManagement.Model.PersistentVMRoleListContext}                                                 
#>

$services = Get-AzureVM | Group-Object -Property ServiceName

foreach ($service in $services) {
    # Output cloud service name
    "Cloud Service '$($service.Name)'"

    # Output VMs in that cloud service
    foreach ($vm in $service.Group) {
        "VM '$($vm.HostName)'"
    }
}

<# Output
Cloud Service 'pksttest1'
VM 'host1'
VM 'host3'
Cloud Service 'pksttest2'
VM 'host2'
#>

在您的示例中,您调用 Azure 服务管理 API 一次以获取所有云服务,然后为每个云服务再次调用以获取 VM。使用 Get-AzureVM 您已经获得了所有必要的数据。

我还在 GitHub Gist 上发布了示例片段:https://gist.github.com/pkirch/1ec6f3c1ca057b8beefb