Tworzenie maszyn wirtualnych usługi DevTest Labs przy użyciu Azure PowerShell

W tym artykule pokazano, jak utworzyć Azure DevTest Labs maszynę wirtualną w laboratorium przy użyciu Azure PowerShell. Za pomocą skryptów programu PowerShell można zautomatyzować tworzenie maszyn wirtualnych laboratorium.

Wymagania wstępne

Aby wykonać czynności opisane w tym artykule, potrzebne są następujące wymagania wstępne:

Skrypt tworzenia maszyny wirtualnej programu PowerShell

Polecenie cmdlet Invoke-AzResourceAction programu PowerShell wywołuje createEnvironment akcję z identyfikatorem zasobu laboratorium i parametrami maszyny wirtualnej. Parametry znajdują się w tabeli skrótów zawierającej wszystkie właściwości maszyny wirtualnej. Właściwości są różne dla każdego typu maszyny wirtualnej. Aby uzyskać właściwości żądanego typu maszyny wirtualnej, zobacz Pobieranie właściwości maszyny wirtualnej.

Ten przykładowy skrypt tworzy maszynę wirtualną z systemem Windows Server 2019 Datacenter. Przykład zawiera również właściwości, aby dodać drugi dysk danych w obszarze 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
}

Zapisz poprzedni skrypt w pliku o nazwie Create-LabVirtualMachine.ps1. Uruchom skrypt przy użyciu następującego polecenia. Wprowadź własne wartości dla symboli zastępczych.

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

Pobieranie właściwości maszyny wirtualnej

W tej sekcji pokazano, jak uzyskać określone właściwości dla typu maszyny wirtualnej, którą chcesz utworzyć. Właściwości można uzyskać z szablonu usługi Azure Resource Manager (ARM) w Azure Portal lub wywołując interfejs API REST usługi DevTest Labs.

Uzyskiwanie właściwości maszyny wirtualnej za pomocą Azure Portal

Tworzenie maszyny wirtualnej w Azure Portal generuje szablon usługi Azure Resource Manager (ARM), który pokazuje właściwości maszyny wirtualnej. Po wybraniu bazy maszyny wirtualnej możesz zobaczyć szablon usługi ARM i pobrać właściwości bez faktycznego utworzenia maszyny wirtualnej. Ta metoda jest najprostszym sposobem uzyskania opisu maszyny wirtualnej JSON, jeśli nie masz jeszcze maszyny wirtualnej laboratorium tego typu.

  1. W Azure Portal na stronie Przegląd laboratorium wybierz pozycję Dodaj na górnym pasku narzędzi.

  2. Na stronie Wybierz bazę wybierz odpowiedni typ maszyny wirtualnej. W zależności od ustawień laboratorium baza maszyn wirtualnych może być obrazem Azure Marketplace, obrazem niestandardowym, formułą lub środowiskiem.

  3. Na stronie Tworzenie zasobu laboratorium opcjonalnie dodaj artefakty i skonfiguruj wszystkie inne ustawienia, które chcesz ustawić na kartach Ustawienia podstawowe i Ustawienia zaawansowane .

  4. Na karcie Ustawienia zaawansowane wybierz pozycję Wyświetl szablon usługi ARM w dolnej części strony.

  5. Na stronie Wyświetlanie szablonu usługi Azure Resource Manager przejrzyj szablon JSON do tworzenia maszyny wirtualnej. Sekcja zasobów zawiera właściwości maszyny wirtualnej.

    Na przykład poniższa resources sekcja zawiera właściwości maszyny wirtualnej z systemem 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. Skopiuj i zapisz szablon do użycia w przyszłej automatyzacji programu PowerShell i przenieś właściwości do skryptu tworzenia maszyny wirtualnej programu PowerShell.

Uzyskiwanie właściwości maszyny wirtualnej za pomocą interfejsu API REST usługi DevTest Labs platformy Azure

Możesz również wywołać interfejs API REST usługi DevTest Labs, aby uzyskać właściwości istniejących maszyn wirtualnych laboratorium. Możesz użyć tych właściwości, aby utworzyć więcej maszyn wirtualnych laboratorium tego samego typu.

  1. Na stronie Virtual Machines — lista wybierz pozycję Wypróbuj powyżej pierwszego bloku kodu.
  2. Na stronie Wypróbuj interfejs API REST :
    • W obszarze labName wprowadź nazwę laboratorium.
    • W obszarze labResourceGroup wprowadź nazwę grupy zasobów laboratorium.
    • W obszarze subscriptionId wybierz subskrypcję platformy Azure laboratorium.
  3. Wybierz pozycję Uruchom.
  4. W sekcji Odpowiedźw obszarze Treść wyświetl właściwości wszystkich istniejących maszyn wirtualnych w laboratorium.

Ustawianie daty wygaśnięcia maszyny wirtualnej

W scenariuszach trenowania, pokazu i wersji próbnej można uniknąć niepotrzebnych kosztów, usuwając automatycznie maszyny wirtualne w określonym dniu. Właściwość maszyny wirtualnej expirationDate można ustawić podczas tworzenia maszyny wirtualnej. Skrypt tworzenia maszyny wirtualnej programu PowerShell wcześniej w tym artykule ustawia datę wygaśnięcia w obszarze properties:

  "expirationDate": "2022-12-01"

Możesz również ustawić daty wygaśnięcia na istniejących maszynach wirtualnych przy użyciu programu PowerShell. Poniższy skrypt programu PowerShell ustawia datę wygaśnięcia istniejącej maszyny wirtualnej laboratorium, jeśli nie ma jeszcze daty wygaśnięcia:

# 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

Następne kroki

Dokumentacja programu PowerShell az.DevTestLabs