Azure Powershell(AZ模块)获取公共IP地址



使用新的Azure Azure模块,是否有人使用该名称获得Azure VM的公共IP地址的语法?COMMTEL Get-AzPublicIpAddress没有对VM名称的参数,仅IP对象名称

这有效,但是我在这里不使用机器名称,它是IP对象的名称:

$CurrentIp = (Get-AzPublicIpAddress -ResourceGroupName 'RG1' -Name 'MyVMname-ip').IpAddress

我不知道如何仅从VM对象获得它,即这不起作用:

Get-AzVM -ResourceGroupName 'RG1' -Name 'MyVMname' | Get-AzPublicIpAddress

,据我所知,只需通过一个带有VM名称的一个PowerShell Get-AzPublicIpAddress获得VM公共IP。Azure中的公共IP是与网络接口相关的个人资源,而不是VM。

如您所见,VM名称没有参数可以在该文档中获取公共IP。但是,您可以通过使用VM名称和资源组名称的PowerShell脚本获得公共IP。脚本以下显示:

$vm = Get-AzureRmVM -ResourceGroupName yourRG -Name vmNamme
$nic = $vm.NetworkProfile.NetworkInterfaces[0].Id.Split('/') | select -Last 1
$publicIpName =  (Get-AzureRmNetworkInterface -ResourceGroupName yourRG -Name $nic).IpConfigurations.PublicIpAddress.Id.Split('/') | select -Last 1
$publicIpAddress = (Get-AzureRmPublicIpAddress -ResourceGroupName yourRG -Name $publicIpName).IpAddress
Write-Output $vmName $publicIpAddress

或一个CLI命令以这样的公开IP:

az vm show -d -g yourRG -n vmName --query publicIps

我认为这是一个更彻底的答案,因为这使用Powershell AZ作为原始问题。另外,它利用generic.list [psobject],可用于以后播放数据。

$rg = 'RgName'
$Ips = Get-AzNetworkInterface -ResourceGroupName $rg
$vmDetails = New-Object "System.Collections.Generic.List[psobject]"
foreach ($instance in $Ips){
    $Vm = ($instance.VirtualMachine).Id.Split('/') | select -Last 1
    $PrivateIp = $instance.IpConfigurations.PrivateIpAddress
    $PublicIp = (Get-AzPublicIpAddress -ResourceGroupName $rg -Name ($instance.IpConfigurations.publicIpAddress.Id.Split('/') | select -Last 1)).IpAddress
    $obj = New-Object psobject -Property @{
        ResourceGroupName = $rg
        VmName = $vm
        PrivateIp = $PrivateIp
        PublicIp = $PublicIp
    }
    $vmDetails.Add($obj)
}
Write-Output $vmDetails

不幸的是,这并不像AZ CLI那样简单,而是一个很好的脚本,无论AZ模块如何。

这是我对安德鲁·哈里斯(Andrew Harris)的回答的看法,它过滤了没有附加到机器上的网络接口和没有公共IP的VM的帐户:

function Get-VmIP {
    <#
    .SYNOPSIS
        Returns the IP addresses for all VMs in the current subscription.
    #>
    [cmdletbinding()]
    param()
    $Interfaces = Get-AzNetworkInterface
    foreach ($Interface in $Interfaces) {
        if ($Interface.VirtualMachine) {
            $VMName = $Interface.VirtualMachine.Id.split('/')[-1]
            $PrivateIP = $Interface.IpConfigurations.PrivateIpAddress
            $PublicIP = if ($Interface.IpConfigurations.publicIpAddress) {
                Get-AzPublicIpAddress -Name ($instance.IpConfigurations.publicIpAddress.Id.Split('/')[-1]).IpAddress
            }     
        
            [PSCustomObject]@{
                VMName    = $VMName
                RGName    = $Interface.ResourceGroupName
                PrivateIP = $PrivateIP
                PublicIP  = $PublicIP
            }
        }
    }
}

这是该线程早期的Mark Wragg脚本的更正版本:

function Get-VmIP {
<#
.SYNOPSIS
    Returns the IP addresses for all VMs in the current subscription.
#>
[cmdletbinding()]
param()
$Interfaces = Get-AzNetworkInterface
foreach ($Interface in $Interfaces) {
    if ($Interface.VirtualMachine) {
        $VMName = $Interface.VirtualMachine.Id.split('/')[-1]
        $PrivateIP = $Interface.IpConfigurations.PrivateIpAddress
        $PublicIpAddressConfig = $Interface.IpConfigurations.publicIpAddress
        
        $PublicIP = $null
        $pconfigname = $null
        if ($PublicIpAddressConfig) {
            $pconfigname = $PublicIpAddressConfig.Id.Split('/')[-1]
            $PublicIP = (Get-AzPublicIpAddress -Name $pconfigname).IpAddress
        }     
    
        [PSCustomObject]@{
            VMName    = $VMName
            RGName    = $Interface.ResourceGroupName
            PrivateIP = $PrivateIP
            PublicIP  = $PublicIP
        }
    }
}

}

接受的答案使用azurerm powershell模块,该模块现在由AZ模块尾声:

$VM = Get-AzVM -ResourceGroupName $ResourceGroupName -VMName $VMName
$NetworkInterfaceName = $VM.NetworkProfile.NetworkInterfaces[0].Id.Split('/')[-1]
$NetworkInterface = Get-AzNetworkInterface -ResourceGroupName $VM.ResourceGroupName -Name $NetworkInterfaceName
$PublicIpAddressName = $NetworkInterface.IpConfigurations.PublicIpAddress.Id.Split('/')[-1]
$PublicIpAddress = Get-AzPublicIpAddress -ResourceGroupName $VM.ResourceGroupName -Name $PublicIpAddressName
Write-Host "IP: $($PublicIpAddress.IpAddress), FQDN: $($PublicIpAddress.DnsSettings.Fqdn)"

脚本的范围在Azure订阅中。

以下是单线脚本,它返回名称,PublicIpaloCaitonMethod(基本上是IP地址的类型,无论是静态的还是public ip)以及订阅中所有网络接口的iPaddress属性。

(Get-AzNetworkInterface ).IpConfigurations.PublicIpAddress.Id | Foreach-Object -Process {$_.Split('/')| select -Last 1} | Foreach-Object -Process {Get-AzPublicIpAddress -Name $_} | Format-List Name, PublicIpAllocationMethod,IpAddress

如果我们删除了最后的语句格式列表,它将显示具有公共IP地址的网络接口的所有属性。

最新更新