Более простой способ получения общедоступного IP-адреса виртуальной машины Azure.

Используя имя / группу ресурсов конкретной виртуальной машины, я пытаюсь получить публичный IP-адрес виртуальной машины.

Этот код работает, но он кажется громоздким по сравнению с другими командлетами AzureRM.

$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

Есть ли более быстрый / простой / короткий способ доступа к этой информации?

8 ответов

Насколько я знаю, пока не для PowerShell. Но вы можете использовать Azure CLI

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

введите описание изображения здесь

Попробуйте команду Azure CLI:

az vm list-ip-addresses -g groupName -n vmName --query "[].virtualMachine.network.publicIpAddresses[*].ipAddress" -o tsv

Или команда PowerShell просто отфильтруйте по имени vm:

$ipAddress= (Get-AzureRmPublicIpAddress -ResourceGroupName groupName | Where-Object { $_.IpConfiguration.Id -like "*vmName*" }
)
$ipAddress.IpAddress

Вы также можете сопоставить AzPublicIpAddress IpConfiguration.Id с NetworkInterfaces.Id виртуальной машины:

      Get-AzPublicIpAddress | ?{$_.IpConfiguration.Id -match "$((Get-AzVM -Name $computername).NetworkProfile.NetworkInterfaces.Id).*" }

Я получил значение моей виртуальной машины Linux с помощью кода ниже.

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

Это вернет что-то в этом роде:

$_.IpAddress
------------
52.170.56.60

Еще один метод из виртуальной машины Linux.

Сначала установите инструменты командной строки Azure на виртуальную машину, см. документы Azure.

Во-вторых, выполните следующее в оболочке на виртуальной машине:

      az network public-ip list  --query  "[?dnsSettings.domainNameLabel=='MY_VM']"

гдеMY_VMэто (надеюсь) имя хоста вашей виртуальной машины. Команда возвращает многострочную строку JSON, которая представляет собой список. Пример показан ниже:

      [
  {
    "dnsSettings": {
      "domainNameLabel": "MY_VM",
      "fqdn": "my_vm.westeurope.cloudapp.azure.com"
    },
    "etag": "W/\"some_uuid...\"",
    ...
    "ipAddress": "AAA.BBB.CCC.DDD",

  },
  ...
]

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

Возможно. Этот сценарий выведет список всех виртуальных машин PIP в вашем облаке Azure.

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

Это выводит немного информации, однако публичный 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

#Получить объект виртуальной машины $vm = Get-AzVM -Name $vmName -Status

#Получить имя объекта сетевого адаптера, подключенного к ВМ $NetworkInterfaceName = $vm.NetworkProfile.NetworkInterfaces.Id.Split("/") | Выберите -Последний 1

# Получить объект сетевого адаптера, подключенный к виртуальной машине $NetworkInterfaceObject = Get-AzNetworkInterface -Name $NetworkInterfaceName

#Получить имя объекта общедоступного IP-адреса, прикрепленного к объекту сетевого адаптера $ipObjectName = $NetworkInterfaceObject.IpConfigurations.PublicIpAddress.Id.Split("/") | Выберите -Последний 1

#get publivc IP-адрес, прикрепленный к объекту общедоступного IP-адреса
$ipObject = Get-AzPublicIpAddress -ResourceGroupName $resourceGroupName -Name $ipObjectName

Запись-вывод $ipObject.IpAddress

Другие вопросы по тегам