Delen via


DevTest Labs-VM's maken met behulp van Azure PowerShell

In dit artikel wordt beschreven hoe u een Azure DevTest Labs virtuele machine (VM) maakt in een lab met behulp van Azure PowerShell. U kunt PowerShell-scripts gebruiken om het maken van lab-VM's te automatiseren.

Vereisten

U hebt de volgende vereisten nodig om dit artikel te kunnen doorlopen:

Script voor het maken van een PowerShell-VM

De PowerShell Invoke-AzResourceAction-cmdlet roept de createEnvironment actie aan met de resource-id en VM-parameters van het lab. De parameters bevinden zich in een hash-tabel die alle VM-eigenschappen bevat. De eigenschappen zijn verschillend voor elk type VM. Zie Vm-eigenschappen ophalen om de eigenschappen voor het gewenste TYPE VM op te halen.

Met dit voorbeeldscript maakt u een vm met Windows Server 2019 Datacenter. Het voorbeeld bevat ook eigenschappen voor het toevoegen van een tweede gegevensschijf onder 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
}

Sla het voorgaande script op in een bestand met de naam Create-LabVirtualMachine.ps1. Voer het script uit met behulp van de volgende opdracht. Voer uw eigen waarden in voor de tijdelijke aanduidingen.

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

VM-eigenschappen ophalen

In deze sectie wordt beschreven hoe u de specifieke eigenschappen kunt ophalen voor het type VM dat u wilt maken. U kunt de eigenschappen ophalen uit een ARM-sjabloon (Azure Resource Manager) in de Azure Portal of door de Azure REST API van DevTest Labs aan te roepen.

De Azure Portal gebruiken om VM-eigenschappen op te halen

Als u een VM maakt in de Azure Portal wordt een ARM-sjabloon (Azure Resource Manager) gegenereerd waarin de eigenschappen van de VM worden weergegeven. Zodra u een VM-basis hebt gekozen, kunt u de ARM-sjabloon zien en de eigenschappen ophalen zonder de VM daadwerkelijk te maken. Deze methode is de eenvoudigste manier om de beschrijving van de JSON-VM op te halen als u nog geen lab-VM van dat type hebt.

  1. Selecteer in de Azure Portal op de pagina Overzicht voor uw lab de optie Toevoegen op de bovenste werkbalk.

  2. Selecteer op de pagina Een basis kiezen het gewenste VM-type. Afhankelijk van de labinstellingen kan de VM-basis een Azure Marketplace-installatiekopieën, een aangepaste installatiekopieën, een formule of een omgeving zijn.

  3. Voeg op de pagina Labresource makenoptioneel artefacten toe en configureer eventueel andere instellingen die u wilt op de tabbladen Basisinstellingen en Geavanceerde instellingen .

  4. Selecteer op het tabblad Geavanceerde instellingende optie ARM-sjabloon weergeven onder aan de pagina.

  5. Bekijk op de pagina Azure Resource Manager-sjabloon weergeven de JSON-sjabloon voor het maken van de virtuele machine. De sectie resources bevat de VM-eigenschappen.

    De volgende resources sectie bevat bijvoorbeeld de eigenschappen voor een VM met 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. Kopieer de sjabloon en sla deze op voor gebruik in toekomstige PowerShell-automatisering en draag de eigenschappen over naar het script voor het maken van een PowerShell-VM.

De DevTest Labs Azure REST API gebruiken om VM-eigenschappen op te halen

U kunt ook de DevTest Labs REST API aanroepen om de eigenschappen van bestaande lab-VM's op te halen. U kunt deze eigenschappen gebruiken om meer lab-VM's van dezelfde typen te maken.

  1. Selecteer op de pagina Virtual Machines - lijst de optie Uitproberen boven het eerste codeblok.
  2. Op de pagina PROBEER VAN DE REST API :
    • Voer onder labName de naam van uw lab in.
    • Voer onder labResourceGroup de naam van de labresourcegroep in.
    • Selecteer onder subscriptionId het Azure-abonnement van het lab.
  3. Selecteer Uitvoeren.
  4. Bekijk in de sectie Antwoord onder Hoofdtekst de eigenschappen voor alle bestaande VM's in het lab.

Vervaldatum van VM instellen

In trainings-, demo- en proefscenario's kunt u onnodige kosten voorkomen door VM's automatisch op een bepaalde datum te verwijderen. U kunt de VM-eigenschap expirationDate instellen wanneer u een virtuele machine maakt. Met het script voor het maken van een PowerShell-VM eerder in dit artikel wordt een vervaldatum ingesteld onder properties:

  "expirationDate": "2022-12-01"

U kunt ook vervaldatums instellen voor bestaande VM's met behulp van PowerShell. Met het volgende PowerShell-script wordt een vervaldatum ingesteld voor een bestaande lab-VM als deze nog geen vervaldatum heeft:

# 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

Volgende stappen

Naslaginformatie over Az.DevTestLabs PowerShell