尝试获取附加了公共IP的所有订阅中所有虚拟机的列表。
从历史上看,我不得不运行两个单独的查询:
az graph query -q "where type =~ 'microsoft.network/publicipaddresses' | project tenantId, subscriptionId, properties.ipAddress, name, id, properties.dnsSettings.fqdn, properties.ipConfiguration.id" --output tsv --first 5000 > ips.csv
和
az graph query -q "where type =~ 'microsoft.network/networkInterfaces' | project name, id, properties.virtualMachine.id, properties.ipConfigurations[0].properties.publicIPAddress.id, properties.networkSecurityGroup.id" --output tsv --first 5000 > networks.csv
但是,这使我得到的结果永远需要在Excel中进行格式化,包括修剪,vlookups等。
真的在这里挣扎。我是Resource Graph的新手,并且正在使用资源管理器。我可以获得虚拟机列表,可以获取网卡列表,可以获取公共IP列表,但是在将它们放在一起时遇到了麻烦:(
答案 0 :(得分:0)
假设您只使用ARM(Azure资源管理器)VM,可以使用下面的Azure资源图查询来获取所有VM及其所有公共IP和私有IP,前提是该计算机至少具有一个公共IP。不同于Microsoft文档here中当前提供的一种,无论是由于存在多个vmNics还是每个vmNic具有多个IP配置,下面的一种都可用于多个IP。
输出示例:
ARG查询:
Resources
| where type =~ 'microsoft.compute/virtualmachines'
| project vmId = tolower(tostring(id)), vmName = name
| join (Resources
| where type =~ 'microsoft.network/networkinterfaces'
| mv-expand ipconfig=properties.ipConfigurations
| project vmId = tolower(tostring(properties.virtualMachine.id)), privateIp = ipconfig.properties.privateIPAddress, publicIpId = tostring(ipconfig.properties.publicIPAddress.id)
| join kind=leftouter (Resources
| where type =~ 'microsoft.network/publicipaddresses'
| project publicIpId = id, publicIp = properties.ipAddress
) on publicIpId
| project-away publicIpId, publicIpId1
| summarize privateIps = make_list(privateIp), publicIps = make_list(publicIp) by vmId
) on vmId
| project-away vmId1
| sort by vmName asc
| where array_length(publicIps)>0
通过上面的查询到Azure资源图资源管理器的直接链接是here。
有关如何逐步构建与此查询非常相似的详细信息,请参见here。如果您要查找“经典” Azure ASM(Azure服务管理器)VM,则在同一篇文章here中将介绍针对它们的ARG查询。