检索 Azure VM 的公共 IP 地址的更简单方法
Posted
技术标签:
【中文标题】检索 Azure VM 的公共 IP 地址的更简单方法【英文标题】:Easier way of retrieving an Azure VM's Public IP address 【发布时间】:2018-11-06 15:54:20 【问题描述】:使用特定 VM 的名称/资源组,我正在尝试获取 VM 的公共 IP 地址。
此代码有效,但与其他 AzureRM cmdlet 相比,它显得笨拙。
$VM = Get-AzureRmVM -ResourceGroupName MyResourceGroup -Name MyVMName
$NIC = $VM.NetworkProfile.NetworkInterfaces[0].Id -replace '.*\/'
$NI = Get-AzureRmNetworkInterface -Name $NIC -ResourceGroupName MyResourceGroup
$NIIC = Get-AzureRmNetworkInterfaceIpConfig -NetworkInterface $NI
$PIP = $NIIC.PublicIpAddress.Id -replace '.*\/'
$PIP = Get-AzureRmPublicIpAddress -Name $PIP -ResourceGroupName MyResourceGroup
$PIP.IpAddress
是否有更快/更容易/更短的方式来访问这些信息?
【问题讨论】:
我认为没有更简单的方法 这个答案能解决你的问题吗?或者解决方案有问题?如果您需要,我也可以提供更多帮助。 【参考方案1】:据我所知,PowerShell 还没有。但是你可以使用 Azure CLI
az vm list-ip-addresses -n <VMName> -g <ResourceGroup> | grep publicIpAddresses
【讨论】:
其实grep参数是'ipAddress'【参考方案2】:尝试 Azure CLI 命令:
az vm list-ip-addresses -g groupName -n vmName --query "[].virtualMachine.network.publicIpAddresses[*].ipAddress" -o tsv
或者 PowerShell 命令只使用您的虚拟机名称进行过滤:
$ipAddress= (Get-AzureRmPublicIpAddress -ResourceGroupName groupName | Where-Object $_.IpConfiguration.Id -like "*vmName*"
)
$ipAddress.IpAddress
【讨论】:
【参考方案3】:这是可能的。此脚本将列出您的 Azure 云中的所有 VM PIP。
旧
$VM_int = Get-AzureRmResource -ODataQuery "`$filter=resourcetype 'Microsoft.Compute/virtualMachines'"
foreach($int in $VM_int)
$vmName = $int.Name
$ipAddress= (Get-AzureRmPublicIpAddress -ResourceGroupName $int.ResourceGroupName | Where-Object $_.IpConfiguration.Id -like "*$vmName*" )
$vmName + ' --- ' + $ipAddress.IpAddress
更新
不幸的是,Get-AzVM 不提供 VM 的公共 IP 地址,但我们可以抓取它的网络接口名称,并通过所有分配的与 NIC 名称匹配的公共 IP 进行通配符搜索。 它并不快,但会提供正确的结果。
$array = @()
foreach ($vm in Get-AzVM)
$vmNicName = $vm.NetworkProfile.NetworkInterfaces.Id.Split("/")[8]
$ipAddress = Get-AzPublicIpAddress | Where-Object $_.IpConfiguration.Id -like "*$vmNicName*"
if ($null -ne $ipAddress)
$pipInput = New-Object psobject -Property @
VM = $vm.Name
PublicIP = $ipAddress.IpAddress
$array += $pipInput
【讨论】:
【参考方案4】:我获得 Linux VM 价值的方法是使用下面的代码。
Get-AzureRmPublicIpAddress -ResourceGroupName <yourRG> -Name <yourVMName> | Select-Object $_.IpAddress
这将返回这样的东西:
$_.IpAddress
------------
52.170.56.60
【讨论】:
【参考方案5】:这会输出一些信息,但是公共 IP 地址在那里。
Get-AzPublicIpAddress -ResourceGroupName MyResourceGroup | Where-Object $_.name -like "*MyVMName*"
或者你可以这样做来获取 IP 地址:
Get-AzPublicIpAddress -ResourceGroupName MyResourceGroup | Where-Object $_.name -like "*MyVMName*" | Select-Object $_.IpAddress
输出如下:
$_.IpAddress
--------------
13.255.162.33
【讨论】:
以上是关于检索 Azure VM 的公共 IP 地址的更简单方法的主要内容,如果未能解决你的问题,请参考以下文章
Azure SDK:如何在运行时获取运行我的软件的当前计算机的公共 IP 地址?