如何按指定Azure资源组列出虚拟机(VM)
筛选列出Azure指定资源组中的虚拟机
你的现有脚本会遍历订阅下所有资源组并列出其中的VM,要只显示指定资源组的VM,只需要简化逻辑,直接针对目标资源组查询即可,不用遍历所有资源组。
修改后的代码:
from azure.mgmt.compute import ComputeManagementClient from azure.mgmt.resource import SubscriptionClient from azure.identity import DefaultAzureCredential from azure.common import credentials # 指定目标资源组名称 resource_group_name = "MyResourceGroup" # 认证逻辑保持不变 CREDENTIAL = DefaultAzureCredential(exclude_shared_token_cache_credential=True, exclude_visual_studio_code_credential=True, exclude_environment_credential=True, exclude_managed_identity_credential=True, exclude_powershell_credential=True, exclude_interactive_browser_credential=True) subscription_id = credentials.get_azure_cli_credentials()[1] subscription_name = SubscriptionClient(CREDENTIAL).subscriptions.get(subscription_id).display_name compute_client = ComputeManagementClient(CREDENTIAL, subscription_id) def list_vms_in_resource_group(group_name): # 直接查询指定资源组下的所有VM vms = compute_client.virtual_machines.list(group_name) for vm in vms: print(f"虚拟机名称: {vm.name}, 资源组: {group_name}") if __name__ == '__main__': # 直接调用指定资源组的VM查询函数 list_vms_in_resource_group(resource_group_name)
关键改动说明:
- 移除了
ResourceManagementClient和遍历所有资源组的逻辑,因为不需要再遍历所有组 - 简化函数为
list_vms_in_resource_group,直接接收目标资源组名称作为参数 - 输出时添加资源组信息,方便确认目标组的VM
可选优化:添加资源组存在性检查
如果担心指定的资源组不存在导致报错,可以添加资源组验证逻辑(需要保留ResourceManagementClient):
from azure.mgmt.resource import ResourceManagementClient # ... 其他代码不变 ... resource_client = ResourceManagementClient(CREDENTIAL, subscription_id) def list_vms_in_resource_group(group_name): # 先检查资源组是否存在 try: resource_client.resource_groups.get(group_name) except Exception as e: print(f"资源组 {group_name} 不存在或无权限访问: {str(e)}") return # 查询并列出VM vms = compute_client.virtual_machines.list(group_name) for vm in vms: print(f"虚拟机名称: {vm.name}, 资源组: {group_name}")
这样就能精准只列出你指定的MyResourceGroup中的所有虚拟机了。
内容的提问来源于stack exchange,提问作者JonH
相关产品推荐
相关产品推荐

