检索 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 地址?

在公共 IP 访问上自动启动 Azure 虚拟机很热门吗?

如何以编程方式更改 Azure 云服务或 VM 的 IP 地址?

Azure经典门户创建VM,如何设置使用静态IP地址?

如何让Azure的VM使用固定的公网IP地址

Azure DNS 转发器不适用于公共资源