3

使用特定 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

是否有更快/更容易/更短的方式访问这些信息?

4

5 回答 5

2

据我所知,PowerShell 还没有。但您可以使用 Azure CLI

az vm list-ip-addresses -n <VMName> -g <ResourceGroup> | grep publicIpAddresses

在此处输入图像描述

于 2018-11-06T20:16:29.360 回答
1

尝试 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
于 2018-11-07T01:49:07.823 回答
0

我获得 Linux VM 价值的方式是使用下面的代码。

Get-AzureRmPublicIpAddress -ResourceGroupName <yourRG> -Name <yourVMName> | Select-Object {$_.IpAddress}

这将返回这种东西:

$_.IpAddress
------------
52.170.56.60
于 2020-03-14T15:53:42.703 回答
0

这是可能的。此脚本将列出 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
    }
}
于 2020-03-19T13:53:36.623 回答
0

这会输出一些信息,但是公共 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
于 2020-05-01T17:39:59.993 回答