如何将名称含'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
相关产品推荐
相关产品推荐

