0

刚才我开始使用 Azure 开发测试实验室。我在实验室中使用 json 模板创建了一个 VM。我想使用 PowerShell 使用 VM 的公共 IP,或者如果可以的话,我想使用模板返回相同的 IP。

这里的挑战是根据 DTL 概念,VM 是在一个新资源组中创建的,而不是您的实验室所在的资源组。我绝对可以在门户上看到实验室 VM 的资源组的名称,但我无法弄清楚如何使用 powershell 来完成。我正在从事自动化工作,所以我需要通过 powershell 来完成。

参考图片。该实验室似乎位于与该实验室相同的资源组中,以绿色框显示。但是,从技术上讲,实验室虚拟机驻留在动态创建的资源组中(RG 名称模式 = 实验室名称 + 虚拟机名称 + 一些随机数字),在屏幕截图中以浅黄色显示。

在此处输入图像描述

4

3 回答 3

1

其他解决方案很有帮助,但并不完整。我正在这样做 - 我正在返回模板的默认输出,即 vmId。参考模板链接

现在我们需要操作这个 vmId 来获取已创建实验室 VM 的资源组的名称。

$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
于 2017-03-09T11:40:18.150 回答
0

好吧,正如我们对开发测试实验室所知,powershell 没有直接的方法。您可以使用下面的 powershell 脚本通过传递虚拟机名称来获取虚拟机的私有 IP 地址。我们可以通过传递 ResourceId来使用Find-AzureRmResource和:Get-AzureRmResource

$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
于 2017-04-11T18:57:53.347 回答
0

好吧,通常一个更优雅的解决方案,反对暴力将是使用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
于 2017-03-02T12:47:13.763 回答