Vytváření virtuálních počítačů DevTest Labs pomocí Azure PowerShell

V tomto článku se dozvíte, jak vytvořit Azure DevTest Labs virtuální počítač v testovacím prostředí pomocí Azure PowerShell. K automatizaci vytváření virtuálních počítačů v testovacím prostředí můžete použít skripty PowerShellu.

Požadavky

Pro práci s tímto článkem potřebujete následující požadavky:

Skript pro vytvoření virtuálního počítače PowerShellu

Rutina PowerShell Invoke-AzResourceAction vyvolá createEnvironment akci s ID prostředku testovacího prostředí a parametry virtuálního počítače. Parametry jsou v tabulce hash, která obsahuje všechny vlastnosti virtuálního počítače. Vlastnosti se liší pro každý typ virtuálního počítače. Informace o získání vlastností požadovaného typu virtuálního počítače najdete v tématu Získání vlastností virtuálního počítače.

Tento ukázkový skript vytvoří virtuální počítač s Windows Serverem 2019 Datacenter. Ukázka obsahuje také vlastnosti pro přidání druhého datového disku v části 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
}

Uložte předchozí skript do souboru s názvemCreate-LabVirtualMachine.ps1. Spusťte skript pomocí následujícího příkazu. Zadejte vlastní hodnoty zástupných symbolů.

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

Získání vlastností virtuálního počítače

V této části se dozvíte, jak získat konkrétní vlastnosti pro typ virtuálního počítače, který chcete vytvořit. Vlastnosti můžete získat ze šablony Azure Resource Manager (ARM) v Azure Portal nebo voláním rozhraní Azure REST API DevTest Labs.

Získání vlastností virtuálního počítače pomocí Azure Portal

Vytvoření virtuálního počítače v Azure Portal vygeneruje šablonu Azure Resource Manager (ARM), která zobrazuje vlastnosti virtuálního počítače. Po výběru základu virtuálního počítače můžete zobrazit šablonu ARM a získat vlastnosti bez skutečného vytvoření virtuálního počítače. Tato metoda je nejjednodušší způsob, jak získat popis virtuálního počítače JSON, pokud ještě nemáte virtuální počítač testovacího prostředí tohoto typu.

  1. V Azure Portal na stránce Přehled testovacího prostředí vyberte na horním panelu nástrojů Přidat.

  2. Na stránce Zvolte základ vyberte požadovaný typ virtuálního počítače. V závislosti na nastavení testovacího prostředí může být základem virtuálního počítače Azure Marketplace image, vlastní image, vzorec nebo prostředí.

  3. Na stránce Vytvořit prostředek testovacího prostředí volitelně přidejte artefakty a nakonfigurujte všechna další požadovaná nastavení na kartách Základní nastavení a Upřesnit nastavení .

  4. Na kartě Upřesnit nastavení vyberte Zobrazit šablonu ARM v dolní části stránky.

  5. Na stránce Zobrazit šablonu Azure Resource Manager zkontrolujte šablonu JSON pro vytvoření virtuálního počítače. Oddíl resources obsahuje vlastnosti virtuálního počítače.

    Například následující resources část obsahuje vlastnosti virtuálního počítače s Windows Serverem 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. Zkopírujte a uložte šablonu, abyste ji mohli použít v budoucí automatizaci PowerShellu, a přeneste vlastnosti do skriptu pro vytvoření virtuálního počítače PowerShellu.

Získání vlastností virtuálního počítače pomocí rozhraní Azure REST API pro DevTest Labs

Můžete také volat rozhraní REST API DevTest Labs a získat tak vlastnosti existujících virtuálních počítačů testovacího prostředí. Tyto vlastnosti můžete použít k vytvoření více testovacích virtuálních počítačů stejného typu.

  1. Na stránce seznamu Virtual Machines – vyberte Vyzkoušet nad prvním blokem kódu.
  2. Na stránce Vyzkoušet rozhraní REST API :
    • V části labName (Název testovacího prostředí) zadejte název testovacího prostředí.
    • V části labResourceGroup zadejte název skupiny prostředků testovacího prostředí.
    • V části subscriptionId vyberte předplatné Azure testovacího prostředí.
  3. Vyberte Run (Spustit).
  4. V části Odpověď v části Text zobrazte vlastnosti všech existujících virtuálních počítačů v testovacím prostředí.

Nastavení data vypršení platnosti virtuálního počítače

Ve scénářích trénování, ukázek a zkušebních verzí se můžete vyhnout zbytečným nákladům tím, že k určitému datu automaticky odstraníte virtuální počítače. Vlastnost virtuálního počítače expirationDate můžete nastavit při vytváření virtuálního počítače. Skript pro vytvoření virtuálního počítače PowerShellu výše v tomto článku nastaví datum vypršení platnosti v části properties:

  "expirationDate": "2022-12-01"

Data vypršení platnosti můžete také nastavit u existujících virtuálních počítačů pomocí PowerShellu. Následující skript PowerShellu nastaví datum vypršení platnosti pro existující virtuální počítač testovacího prostředí, pokud ještě nemá datum vypršení platnosti:

# 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

Další kroky

Referenční informace k Prostředí PowerShell pro Az.DevTestLabs