You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Azure中获取NIC及关联虚拟机的实际名称?

获取Azure网络接口关联虚拟机名称的解决方法

这个问题很常见——你看到的Microsoft.Azure.Commands.Network.Models.PSResourceId其实是一个包含虚拟机资源ID的对象,而不是直接的名称。直接用Select Name, VirtualMachine只会显示对象类型,我们需要提取对象里的具体信息。下面给你几种实用的解决办法:

方法1:直接从资源ID中提取VM名称

Azure资源ID的格式是固定的:/subscriptions/{订阅ID}/resourceGroups/{资源组名}/providers/Microsoft.Compute/virtualMachines/{虚拟机名称},所以我们可以通过分割ID字符串来获取最后一段的VM名称。用PowerShell的计算属性就能实现:

Get-AzureRmNetworkInterface | Select-Object Name, @{
    Name = "VirtualMachineName"
    Expression = { $_.VirtualMachine.Id.Split('/')[-1] }
}

这段代码会给你返回两列:NIC名称和对应的VM名称,简洁高效。

方法2:关联VM命令获取完整信息

如果你需要VM的更多属性(比如资源组、虚拟机大小),可以把NIC和VM资源关联起来,遍历每个NIC并查询对应的VM:

$allNics = Get-AzureRmNetworkInterface
foreach ($nic in $allNics) {
    $vmDetails = if ($nic.VirtualMachine.Id) {
        $vm = Get-AzureRmVM -ResourceId $nic.VirtualMachine.Id
        [PSCustomObject]@{
            VMName = $vm.Name
            ResourceGroup = $vm.ResourceGroupName
            VmSize = $vm.HardwareProfile.VmSize
        }
    } else {
        [PSCustomObject]@{
            VMName = "未绑定虚拟机"
            ResourceGroup = "N/A"
            VmSize = "N/A"
        }
    }

    [PSCustomObject]@{
        NICName = $nic.Name
        VMName = $vmDetails.VMName
        VMResourceGroup = $vmDetails.ResourceGroup
        VMSize = $vmDetails.VmSize
    }
}

这个方法还能处理那些没有绑定任何VM的NIC,返回更完整的状态信息。

方法3:使用Az模块(推荐,AzureRm已弃用)

如果你已经升级到最新的Az模块(AzureRm模块已经停止维护),可以用对应的Az命令实现同样的效果:

Get-AzNetworkInterface | Select-Object Name, @{
    Name = "VirtualMachineName"
    Expression = { $_.VirtualMachine.Id.Split('/')[-1] }
}

分割ID的方式依然是最直接的,如果你需要更复杂的资源关联,可以尝试Join-AzResource命令。

补充说明

为什么你原来的命令看不到VM名称?因为VirtualMachine字段是一个PSResourceId对象,它包含Id、ResourceGroupName等多个属性,直接用Select输出的话只会显示对象的类型名称,必须指定提取对象里的具体属性值才能看到实际名称。

内容的提问来源于stack exchange,提问作者Mohamed Wali

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:12:41