Более простой способ получения общедоступного 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