Получить частный IP-адрес виртуальной машины в Azure Dev Test Lab с помощью Powershell
Только сейчас я начал с Azure DevTest Lab. Я создал виртуальную машину в лаборатории, используя шаблон json. Я хочу использовать публичный IP-адрес виртуальной машины с помощью powershell или, возможно, я бы хотел вернуть тот же шаблон с использованием шаблона, если смогу.
Проблема здесь заключается в том, что согласно концепции DTL виртуальная машина создается в новой группе ресурсов, отличной от той, в которой существует ваша лаборатория. Я определенно вижу название группы ресурсов лабораторной виртуальной машины на портале, но не могу понять, как это можно сделать с помощью powershell. Я работаю над автоматизацией, поэтому мне нужно сделать это с помощью powershell.
Обратитесь к картинке. Лаборатория, кажется, находится в группе ресурсов в том же месте, где существует лаборатория, показанная в зеленом поле. Но технически виртуальная лаборатория находится в динамически создаваемой группе ресурсов (шаблон имени RG = имя лаборатории + имя виртуальной машины + несколько случайных цифр), показанной светло-желтым на снимке экрана.
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
Ну, как мы знаем для 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
Ну, как правило, более элегантное решение, выбранное для грубой силы, заключается в использовании 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