Share via


Criar VMs do DevTest Labs com Azure PowerShell

Este artigo mostra-lhe como criar uma máquina virtual (VM) Azure DevTest Labs num laboratório com Azure PowerShell. Pode utilizar scripts do PowerShell para automatizar a criação de VMs de laboratório.

Pré-requisitos

Precisa dos seguintes pré-requisitos para trabalhar neste artigo:

Script de criação da VM do PowerShell

O cmdlet Invoke-AzResourceAction do PowerShell invoca a createEnvironment ação com o ID de recurso e os parâmetros da VM do laboratório. Os parâmetros estão numa tabela hash que contém todas as propriedades da VM. As propriedades são diferentes para cada tipo de VM. Para obter as propriedades do tipo de VM que pretende, veja Obter propriedades da VM.

Este script de exemplo cria uma VM do Windows Server 2019 Datacenter. O exemplo também inclui propriedades para adicionar um segundo disco de dados em dataDiskParameters.

[CmdletBinding()]

Param(
[Parameter(Mandatory = $false)]  $SubscriptionId,
[Parameter(Mandatory = $true)]   $LabResourceGroup,
[Parameter(Mandatory = $true)]   $LabName,
[Parameter(Mandatory = $true)]   $NewVmName,
[Parameter(Mandatory = $true)]   $UserName,
[Parameter(Mandatory = $true)]   $Password
)

pushd $PSScriptRoot

try {
    if ($SubscriptionId -eq $null) {
        $SubscriptionId = (Get-AzContext).Subscription.SubscriptionId
    }

    $API_VERSION = '2016-05-15'
    $lab = Get-AzResource -ResourceId "/subscriptions/$SubscriptionId/resourceGroups/$LabResourceGroup/providers/Microsoft.DevTestLab/labs/$LabName"

    if ($lab -eq $null) {
       throw "Unable to find lab $LabName resource group $LabResourceGroup in subscription $SubscriptionId."
    }

    $virtualNetwork = @(Get-AzResource -ResourceType  'Microsoft.DevTestLab/labs/virtualnetworks' -ResourceName $LabName -ResourceGroupName $lab.ResourceGroupName -ApiVersion $API_VERSION)[0]

    #The preceding command puts the VM in the first allowed subnet in the first virtual network for the lab.
    #If you need to use a specific virtual network, use | to find the network. For example:
    #$virtualNetwork = @(Get-AzResource -ResourceType  'Microsoft.DevTestLab/labs/virtualnetworks' -ResourceName $LabName -ResourceGroupName $lab.ResourceGroupName -ApiVersion $API_VERSION) | Where-Object Name -EQ "SpecificVNetName"

    $labSubnetName = $virtualNetwork.properties.allowedSubnets[0].labSubnetName

    #Prepare all the properties needed for the createEnvironment call.
    # The properties are slightly different depending on the type of VM base.
    # The virtual network setup might also affect the properties.

    $parameters = @{
       "name"      = $NewVmName;
       "location"  = $lab.Location;
       "properties" = @{
          "labVirtualNetworkId"     = $virtualNetwork.ResourceId;
          "labSubnetName"           = $labSubnetName;
          "notes"                   = "Windows Server 2019 Datacenter";
          "osType"                  = "windows"
          "expirationDate"          = "2022-12-01"
          "galleryImageReference"   = @{
             "offer"     = "WindowsServer";
             "publisher" = "MicrosoftWindowsServer";
             "sku"       = "2019-Datacenter";
             "osType"    = "Windows";
             "version"   = "latest"
          };
          "size"                    = "Standard_DS2_v2";
          "userName"                = $UserName;
          "password"                = $Password;
          "disallowPublicIpAddress" = $true;
          "dataDiskParameters" = @(@{
            "attachNewDataDiskOptions" = @{
                "diskName" = "adddatadisk"
                "diskSizeGiB" = "1023"
                "diskType" = "Standard"
                }
          "hostCaching" = "ReadWrite"
          })
       }
    }

    #The following line has the same effect as invoking the
    # https://azure.github.io/projects/apis/#!/Labs/Labs_CreateEnvironment REST API

    Invoke-AzResourceAction -ResourceId $lab.ResourceId -Action 'createEnvironment' -Parameters $parameters -ApiVersion $API_VERSION -Force -Verbose
}
finally {
   popd
}

Guarde o script anterior num ficheiro com o nomeCreate-LabVirtualMachine.ps1. Execute o script com o seguinte comando. Introduza os seus próprios valores para os marcadores de posição.

.\Create-LabVirtualMachine.ps1 -ResourceGroupName '<lab resource group name>' -LabName '<lab name>' -userName '<VM administrative username>' -password '<VM admin password>' -VMName '<VM name to create>'

Obter propriedades da VM

Esta secção mostra como obter as propriedades específicas para o tipo de VM que pretende criar. Pode obter as propriedades de um modelo do Azure Resource Manager (ARM) no portal do Azure ou ao chamar a API REST do Azure DevTest Labs.

Utilizar o portal do Azure para obter as propriedades da VM

Criar uma VM no portal do Azure gera um modelo do Azure Resource Manager (ARM) que mostra as propriedades da VM. Depois de escolher uma base de VM, pode ver o modelo do ARM e obter as propriedades sem criar realmente a VM. Este método é a forma mais fácil de obter a descrição da VM JSON se ainda não tiver uma VM de laboratório desse tipo.

  1. Na portal do Azure, na página Descrição geral do seu laboratório, selecione Adicionar na barra de ferramentas superior.

  2. Na página Escolher uma base , selecione o tipo de VM que pretende. Dependendo das definições do laboratório, a base da VM pode ser uma imagem Azure Marketplace, uma imagem personalizada, uma fórmula ou um ambiente.

  3. Na página Criar recurso de laboratório , adicione opcionalmente artefactos e configure quaisquer outras definições pretendidas nos separadores Definições básicas e Definições avançadas .

  4. No separador Definições avançadas , selecione Ver modelo do ARM na parte inferior da página.

  5. Na página Ver modelo do Azure Resource Manager, reveja o modelo JSON para criar a VM. A secção resources (recursos ) tem as propriedades da VM.

    Por exemplo, a secção seguinte resources tem as propriedades de uma VM do Windows Server 2022 Datacenter:

      "resources": [
           {
                "apiVersion": "2018-10-15-preview",
                "type": "Microsoft.DevTestLab/labs/virtualmachines",
                "name": "[variables('vmName')]",
                "location": "[resourceGroup().location]",
                "properties": {
                     "labVirtualNetworkId": "[variables('labVirtualNetworkId')]",
                     "notes": "Windows Server 2022 Datacenter: Azure Edition Core",
                     "galleryImageReference": {
                          "offer": "WindowsServer",
                          "publisher": "MicrosoftWindowsServer",
                          "sku": "2022-datacenter-azure-edition-core",
                          "osType": "Windows",
                          "version": "latest"
                     },
                     "size": "[parameters('size')]",
                     "userName": "[parameters('userName')]",
                     "password": "[parameters('password')]",
                     "isAuthenticationWithSshKey": false,
                     "labSubnetName": "[variables('labSubnetName')]",
                     "disallowPublicIpAddress": true,
                     "storageType": "Standard",
                     "allowClaim": false,
                     "networkInterface": {
                          "sharedPublicIpAddressConfiguration": {
                               "inboundNatRules": [
                                    {
                                         "transportProtocol": "tcp",
                                         "backendPort": 3389
                                    }
                               ]
                          }
                     }
                }
           }
      ],
    
  6. Copie e guarde o modelo para utilizar na automatização futura do PowerShell e transfira as propriedades para o script de criação da VM do PowerShell.

Utilizar a API REST do Azure de DevTest Labs para obter as propriedades da VM

Também pode chamar a API REST de DevTest Labs para obter as propriedades das VMs de laboratório existentes. Pode utilizar essas propriedades para criar mais VMs de laboratório dos mesmos tipos.

  1. Na página Máquinas Virtuais - lista, selecione Experimentar acima do primeiro bloco de código.
  2. Na página Experimente a API REST :
    • Em labName, introduza o nome do laboratório.
    • Em labResourceGroup, introduza o nome do grupo de recursos do laboratório.
    • Em subscriptionId, selecione a subscrição do Azure do laboratório.
  3. Selecione Executar.
  4. Na secção Response (Resposta ) em Body (Corpo), veja as propriedades de todas as VMs existentes no laboratório.

Definir data de expiração da VM

Em cenários de preparação, demonstração e avaliação, pode evitar custos desnecessários ao eliminar VMs automaticamente numa determinada data. Pode definir a propriedade da VM expirationDate quando cria uma VM. O script de criação da VM do PowerShell anteriormente neste artigo define uma data propertiesde expiração em :

  "expirationDate": "2022-12-01"

Também pode definir datas de expiração em VMs existentes com o PowerShell. O seguinte script do PowerShell define uma data de expiração para uma VM de laboratório existente se ainda não tiver uma data de expiração:

# Enter your own values:
$subscriptionId = '<Lab subscription Id>'
$labResourceGroup = '<Lab resource group>'
$labName = '<Lab name>'
$VmName = '<VM name>'
$expirationDate = '<Expiration date, such as 2022-12-16>'

# Sign in to your Azure account

Select-AzSubscription -SubscriptionId $subscriptionId
$VmResourceId = "subscriptions/$subscriptionId/resourcegroups/$labResourceGroup/providers/microsoft.devtestlab/labs/$labName/virtualmachines/$VmName"

$vm = Get-AzResource -ResourceId $VmResourceId -ExpandProperties

# Get the Vm properties
$VmProperties = $vm.Properties

# Set the expirationDate property
If ($VmProperties.expirationDate -eq $null) {
    $VmProperties | Add-Member -MemberType NoteProperty -Name expirationDate -Value $expirationDate -Force
} Else {
    $VmProperties.expirationDate = $expirationDate
}

Set-AzResource -ResourceId $VmResourceId -Properties $VmProperties -Force

Passos seguintes

Referência do PowerShell Az.DevTestLabs