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

如何将名称含'server'的Azure VM名称及私有IP存入变量?

获取名称包含"server"的VM及其私有IP地址

嗨,我来帮你搞定这个问题!你现在的代码已经能筛选出名称带"server"的VM了,但私有IP并不直接存在VM对象里——它是绑定在VM关联的网络接口(NIC)上的,所以得把这部分信息也拉取出来才行。

这里有两种实用的方法可以实现你的需求:

方法一:遍历VM并关联查询网络接口

这种方式先拿到目标VM集合,再逐个获取对应的NIC来提取私有IP,逻辑清晰易懂:

$resourcegroup = "你的资源组名称"
# 先筛选出名称包含"server"的VM
$machines = Get-AzureRmVM -ResourceGroupName $resourcegroup | Where-Object {$_.Name -like "*server*"}

# 遍历VM,收集名称和私有IP到自定义对象
$vmWithIp = foreach ($vm in $machines) {
    # 获取当前VM关联的网络接口资源
    $nic = Get-AzureRmNetworkInterface -ResourceId $vm.NetworkProfile.NetworkInterfaces[0].Id
    # 从NIC的IP配置中提取私有IP
    $privateIp = $nic.IpConfigurations.PrivateIpAddress
    # 返回包含VM名称和私有IP的自定义对象
    [PSCustomObject]@{
        VMName     = $vm.Name
        PrivateIP  = $privateIp
    }
}

# 查看最终结果
$vmWithIp

方法二:用计算属性一次性输出结果

如果想要更简洁的写法,可以直接在筛选VM的管道里添加计算属性,一步到位获取IP:

$resourcegroup = "你的资源组名称"
$vmWithIp = Get-AzureRmVM -ResourceGroupName $resourcegroup | 
    Where-Object {$_.Name -like "*server*"} |
    Select-Object Name, 
        @{
            Name       = "PrivateIP"
            Expression = {
                # 通过VM的网络接口ID查询NIC,再提取私有IP
                (Get-AzureRmNetworkInterface -ResourceId $_.NetworkProfile.NetworkInterfaces[0].Id).IpConfigurations.PrivateIpAddress
            }
        }

# 查看结果
$vmWithIp

小提醒:

  • 上面的代码默认每个VM只关联了一个网络接口,如果你的VM有多个NIC,需要调整逻辑遍历所有NIC的IP地址哦
  • 执行代码前记得确认已经登录Azure账号(Connect-AzureRmAccount),并且切换到了正确的订阅(Select-AzureRmSubscription)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:54:43