Condividi tramite


Creare macchine virtuali DevTest Labs usando Azure PowerShell

Questo articolo illustra come creare una macchina virtuale di Azure DevTest Labs in un lab usando Azure PowerShell. È possibile usare script di PowerShell per automatizzare la creazione di macchine virtuali lab.

Prerequisiti

Sono necessari i prerequisiti seguenti per eseguire questo articolo:

Script di creazione di macchine virtuali di PowerShell

Il cmdlet PowerShell Invoke-AzResourceAction richiama l'azione con l'ID createEnvironment risorsa del lab e i parametri della macchina virtuale. I parametri si trovano in una tabella hash che contiene tutte le proprietà della macchina virtuale. Le proprietà sono diverse per ogni tipo di macchina virtuale. Per ottenere le proprietà per il tipo di macchina virtuale desiderato, vedere Ottenere le proprietà della macchina virtuale.

Questo script di esempio crea una macchina virtuale windows Server 2019 Datacenter. L'esempio include anche proprietà per aggiungere un secondo disco dati in 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
}

Salvare lo script precedente in un file denominato Create-LabVirtualMachine.ps1. Eseguire lo script usando il comando seguente. Immettere i propri valori per i segnaposto.

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

Ottenere le proprietà della macchina virtuale

Questa sezione illustra come ottenere le proprietà specifiche per il tipo di macchina virtuale da creare. È possibile ottenere le proprietà da un modello di Azure Resource Manager (ARM) nella portale di Azure o chiamando l'API REST di DevTest Labs.

Usare la portale di Azure per ottenere le proprietà della macchina virtuale

La creazione di una macchina virtuale nel portale di Azure genera un modello di Azure Resource Manager (ARM) che mostra le proprietà della macchina virtuale. Dopo aver scelto una base di macchine virtuali, è possibile visualizzare il modello arm e ottenere le proprietà senza creare effettivamente la macchina virtuale. Questo metodo è il modo più semplice per ottenere la descrizione della macchina virtuale JSON se non si dispone già di una macchina virtuale lab di tale tipo.

  1. Nella portale di Azure nella pagina Panoramica del lab selezionare Aggiungi sulla barra degli strumenti superiore.

  2. Nella pagina Scegliere una base selezionare il tipo di macchina virtuale desiderato. A seconda delle impostazioni del lab, la base della macchina virtuale può essere un'immagine Azure Marketplace, un'immagine personalizzata, una formula o un ambiente.

  3. Nella pagina Crea risorsa lab aggiungere facoltativamente elementi e configurare tutte le altre impostazioni desiderate nelle schede Impostazioni di base e Impostazioni avanzate .

  4. Nella scheda Impostazioni avanzate selezionare Visualizza modello arm nella parte inferiore della pagina.

  5. Nella pagina Visualizza modello di Azure Resource Manager esaminare il modello JSON per la creazione della macchina virtuale. La sezione risorse include le proprietà della macchina virtuale.

    La sezione seguente resources , ad esempio, contiene le proprietà per una macchina virtuale di 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. Copiare e salvare il modello da usare in futuro automazione di PowerShell e trasferire le proprietà nello script di creazione della macchina virtuale di PowerShell.

Usare l'API REST di DevTest Labs per ottenere le proprietà della macchina virtuale

È anche possibile chiamare l'API REST devTest Labs per ottenere le proprietà delle macchine virtuali lab esistenti. È possibile usare queste proprietà per creare più macchine virtuali lab degli stessi tipi.

  1. Nella pagina Macchine virtuali - elenco selezionare Prova sopra il primo blocco di codice.
  2. Nella pagina DELL'API REST Provare :
    • In labName immettere il nome del lab.
    • In labResourceGroup immettere il nome del gruppo di risorse lab.
    • In subscriptionId selezionare la sottoscrizione di Azure del lab.
  3. Selezionare Run (Esegui).
  4. Nella sezione Risposta in Corpo visualizzare le proprietà per tutte le macchine virtuali esistenti nel lab.

Impostare la data di scadenza della macchina virtuale

Negli scenari di training, demo e versione di valutazione è possibile evitare costi non necessari eliminando automaticamente le macchine virtuali in una determinata data. È possibile impostare la proprietà della macchina virtuale quando si crea una macchina virtuale expirationDate . Lo script di creazione della macchina virtuale powerShell precedente in questo articolo imposta una data di scadenza in properties:

  "expirationDate": "2022-12-01"

È anche possibile impostare le date di scadenza nelle macchine virtuali esistenti usando PowerShell. Lo script di PowerShell seguente imposta una data di scadenza per una macchina virtuale lab esistente se non ha già una data di scadenza:

# 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

Passaggi successivi

Informazioni di riferimento su PowerShell az.DevTestLabs