【问题标题】:Get private IP of VM in Azure Dev Test Lab using Powershell使用 Powershell 在 Azure 开发测试实验室中获取 VM 的私有 IP
【发布时间】:2017-03-02 09:20:31
【问题描述】:

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

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

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

【问题讨论】:

  • 那是什么问题?
  • 问题是如何在不知道资源组名称的情况下使用powershell获取VM IP
  • 好吧,你知道 devtestlabs 的名字
  • 是的,我知道 devtestlab 的名称。 RG 名称模式 = 实验室名称 + 虚拟机名称 + 一些随机数字。我对最后一部分“一些随机数”一无所知
  • 你知道vmname吗?还是需要动态确定?

标签: azure azure-powershell azure-devtest-labs


【解决方案1】:

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

现在我们需要操作这个 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

【讨论】:

    【解决方案2】:

    嗯,一般来说,一个更优雅的解决方案是使用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
    

    【讨论】:

      【解决方案3】:

      好吧,正如我们所知道的 DevTest Labs 没有直接的 powershell 方法。您可以使用以下 powershell 脚本通过传递虚拟机名称来获取虚拟机的专用 IP 地址。我们可以通过传递 ResourceId 来使用Find-AzureRmResourceGet-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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多