Получите частный IP-адрес виртуальной машины в Azure Dev Test Lab с помощью Powershell

Только что я начал с Azure DevTest Lab. Я создал виртуальную машину в лаборатории, используя шаблон json. Я хочу использовать общедоступный IP-адрес виртуальной машины с помощью PowerShell или, возможно, я хотел бы вернуть тот же IP-адрес с помощью шаблона, если смогу.

Проблема здесь в том, что согласно концепции DTL виртуальная машина создается в новой группе ресурсов, отличной от той, в которой существует ваша лаборатория. Я определенно вижу название группы ресурсов лабораторной виртуальной машины на портале, но не могу понять, как это можно сделать с помощью PowerShell. Я работаю над автоматизацией, поэтому мне нужно сделать это с помощью PowerShell.

Обратитесь к картинке. Кажется, что лаборатория находится в группе ресурсов там же, где существует лаборатория, что показано зеленым прямоугольником. Но технически лабораторная виртуальная машина находится в динамически создаваемой группе ресурсов (шаблон имени RG = имя лаборатории + имя виртуальной машины + некоторые случайные цифры), показанной светло-желтым цветом на снимке экрана.

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


person Aatif Akhter    schedule 02.03.2017    source источник
comment
так в чем проблема?   -  person 4c74356b41    schedule 02.03.2017
comment
Проблема в том, как получить IP-адрес виртуальной машины, не зная имени группы ресурсов, с помощью PowerShell.   -  person Aatif Akhter    schedule 02.03.2017
comment
ну вы знаете название devtestlabs   -  person 4c74356b41    schedule 02.03.2017
comment
Да, я знаю название devtestlab. Шаблон имени RG = имя лаборатории + имя виртуальной машины + несколько случайных цифр. Я понятия не имею, в последней части какое-то случайное число   -  person Aatif Akhter    schedule 02.03.2017
comment
ты знаешь vmname? или нужно динамически определять?   -  person 4c74356b41    schedule 02.03.2017
comment
Я знаю имя виртуальной машины.   -  person Aatif Akhter    schedule 02.03.2017


Ответы (3)


Другие решения полезны, но не полны. Я делаю так - я возвращаю вывод шаблона по умолчанию, то есть vmId. См. Шаблон ссылка

Теперь нам нужно манипулировать этим vmId, чтобы получить имя группы ресурсов, в которой была создана лабораторная виртуальная машина.

$result = New-AzureRmResourceGroupDeployment -ResourceGroupName "aatifdtlrg207912" -TemplateFile "D:\AzureDeploy.json" -TemplateParameterObject $paramValues
$VMId = $result.outputs.Values.value
$VMComputeId = (Get-AzureRmResource -Id $VMId).Properties.ComputeId
$RGNameofVM = $VMComputeId.split("/")
$RGNameofVM = $RGNameofVM[4] 
$IP = (Get-AzureRmNetworkInterface -Name $VMName -ResourceGroupName $RGNameofVM ).IpConfigurations.PrivateIpAddress
person Aatif Akhter    schedule 09.03.2017

Ну, в общем, более элегантным решением, противопоставленным брутфорсу, было бы использовать Get-AzureRmResource

$Resource = Get-AzureRmResource -ResourceId "/subscriptions/$sub_GUID/resourcegroups/$RG_devlab_Name/providers/microsoft.devtestlab/labs/$LabName/virtualmachines/$VMName"
$Resource.Properties.computeId -match 'resourceGroups/(.+)/providers'
$RGName = $Matches[1]
$IP = (Get-AzureRmNetworkInterface -Name $VMName-ResourceGroupName $RGName).IpConfigurations.PrivateIpAddress
person 4c74356b41    schedule 02.03.2017

Что ж, как мы знаем, для DevTest Labs нет прямого пути для PowerShell. Вы можете использовать приведенный ниже сценарий PowerShell, чтобы получить частный IP-адрес виртуальной машины, просто передав имя виртуальной машины. Мы можем использовать Find-AzureRmResource и Get-AzureRmResource, передав ResourceId:

$vmNicdetails = Find-AzureRmResource -ResourceNameContains mytestVM | Where {$_.ResourceType -eq 'Microsoft.Network/networkInterfaces'}
$nicdetails = Get-AzureRmResource -ResourceId $vmNicdetails.ResourceId
$ipconfig = Get-AzureRmResource -ResourceId
$nicdetails.Properties.ipConfigurations.id -ApiVersion '2017-03-01'
$ipconfig.Properties.privateIPAddress
person Raghuram Korukonda    schedule 11.04.2017