Azure Powershell (модуль Az) получить общедоступный IP-адрес - PullRequest
0 голосов
/ 13 февраля 2019

С новым модулем Az для Azure у кого-нибудь есть синтаксис для получения общедоступного IP-адреса виртуальной машины Azure, используя имя?Командлет Get-AzPublicIpAddress не имеет аргумента для имени виртуальной машины, только имя объекта IP

Это работает, но я не использую здесь имя компьютера, это имя самого объекта IP:

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

Я не могу понять, как просто получить его от объекта VM, т.е. это не работает:

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

Ответы [ 3 ]

0 голосов
/ 19 июня 2019

Область действия сценария находится в подписке Azure.

Ниже приведен однострочный скрипт, который возвращает Name, PublicIpAllocaitonMethod (в основном это тип IP-адреса, будь то статический или публичный 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

Если мы удалим последний оператор Format-List, он отобразит все свойства сетевых интерфейсов, имеющих публичные IP-адреса.

0 голосов
/ 19 июня 2019

Я думаю, что это более подробный ответ, поскольку в нем используется 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

Это не так просто, как в CL CL Az, к сожалению, но хороший скрипт для использования независимо от Azмодули.

0 голосов
/ 13 февраля 2019

Как я знаю, невозможно получить публичный IP-адрес виртуальной машины через один PowerShell Get-AzPublicIpAddress с именем виртуальной машины.И общедоступный IP-адрес в Azure - это отдельный ресурс, связанный с сетевым интерфейсом, а не с виртуальной машиной.

Как видите, для имени виртуальной машины нет параметра для получения общедоступного IP-адреса в этом документе.Но вы можете получить общедоступный IP-адрес с помощью сценария PowerShell только с помощью имени виртуальной машины и имени группы ресурсов.Сценарий показывает ниже:

$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
...