Partager via


Créer des machines virtuelles DevTest Labs à l’aide d’Azure PowerShell

Cet article explique comment créer une machine virtuelle Azure DevTest Labs dans un laboratoire à l’aide d’Azure PowerShell. Vous pouvez utiliser des scripts PowerShell pour automatiser la création de machines virtuelles de laboratoire.

Conditions préalables

Vous avez besoin des conditions préalables suivantes pour parcourir cet article :

Script de création de machine virtuelle PowerShell

L’applet de commande PowerShell Invoke-AzResourceAction appelle l’action avec l’ID createEnvironment de ressource et les paramètres de machine virtuelle du labo. Les paramètres se trouvent dans une table de hachage qui contient toutes les propriétés de machine virtuelle. Les propriétés sont différentes pour chaque type de machine virtuelle. Pour obtenir les propriétés du type de machine virtuelle souhaitée, consultez Obtenir les propriétés de la machine virtuelle.

Cet exemple de script crée une machine virtuelle Windows Server 2019 Datacenter. L’exemple inclut également des propriétés pour ajouter un deuxième disque de données sous 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
}

Enregistrez le script précédent dans un fichier nommé Create-LabVirtualMachine.ps1. Exécutez le script à l’aide de la commande suivante. Entrez vos propres valeurs pour les espaces réservés.

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

Obtenir les propriétés de machine virtuelle

Cette section montre comment obtenir les propriétés spécifiques pour le type de machine virtuelle que vous souhaitez créer. Vous pouvez obtenir les propriétés à partir d’un modèle Azure Resource Manager (ARM) dans le portail Azure ou en appelant l’API REST Azure DevTest Labs.

Utiliser le portail Azure pour obtenir les propriétés de machine virtuelle

La création d’une machine virtuelle dans le portail Azure génère un modèle Azure Resource Manager (ARM) qui affiche les propriétés de la machine virtuelle. Une fois que vous avez choisi une base de machine virtuelle, vous pouvez voir le modèle ARM et obtenir les propriétés sans réellement créer la machine virtuelle. Cette méthode est le moyen le plus simple d’obtenir la description de la machine virtuelle JSON si vous n’avez pas encore de machine virtuelle lab de ce type.

  1. Dans le portail Azure, dans la page Vue d’ensemble de votre laboratoire, sélectionnez Ajouter dans la barre d’outils supérieure.

  2. Dans la page Choisir une base , sélectionnez le type de machine virtuelle souhaité. Selon les paramètres du laboratoire, la base de machines virtuelles peut être une image de la Place de marché Azure, une image personnalisée, une formule ou un environnement.

  3. Dans la page Créer une ressource lab , ajoutez éventuellement des artefacts et configurez les autres paramètres souhaités sous les onglets Paramètres de base et Paramètres avancés .

  4. Sous l’onglet Paramètres avancés , sélectionnez Afficher le modèle ARM en bas de la page.

  5. Dans la page Afficher le modèle Azure Resource Manager , passez en revue le modèle JSON pour la création de la machine virtuelle. La section ressources contient les propriétés de la machine virtuelle.

    Par exemple, la section suivante resources contient les propriétés d’une machine virtuelle 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. Copiez et enregistrez le modèle à utiliser dans l’automatisation De PowerShell ultérieure, puis transférez les propriétés vers le script de création de machine virtuelle PowerShell.

Utiliser l’API REST Azure DevTest Labs pour obtenir des propriétés de machine virtuelle

Vous pouvez également appeler l’API REST DevTest Labs pour obtenir les propriétés des machines virtuelles de laboratoire existantes. Vous pouvez utiliser ces propriétés pour créer d’autres machines virtuelles lab des mêmes types.

  1. Dans la page De liste Machines virtuelles , sélectionnez Essayer au-dessus du premier bloc de code.
  2. Dans la page Essayer l’API REST :
    • Sous labName, entrez le nom de votre laboratoire.
    • Sous labResourceGroup, entrez le nom du groupe de ressources lab.
    • Sous subscriptionId, sélectionnez l’abonnement Azure du labo.
  3. Sélectionnez Exécuter.
  4. Dans la section Réponse sous Corps, affichez les propriétés de toutes les machines virtuelles existantes dans le labo.

Définir la date d’expiration de la machine virtuelle

Dans les scénarios d’entraînement, de démonstration et d’essai, vous pouvez éviter les coûts inutiles en supprimant automatiquement des machines virtuelles à une certaine date. Vous pouvez définir la propriété de machine virtuelle expirationDate lorsque vous créez une machine virtuelle. Le script de création de machine virtuelle PowerShell précédemment dans cet article définit une date d’expiration sous properties:

  "expirationDate": "2022-12-01"

Vous pouvez également définir des dates d’expiration sur des machines virtuelles existantes à l’aide de PowerShell. Le script PowerShell suivant définit une date d’expiration pour une machine virtuelle lab existante s’il n’a pas encore de date d’expiration :

# 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

Étapes suivantes

Informations de référence sur Az.DevTestLabs PowerShell