إنشاء أجهزة DevTest Labs الظاهرية باستخدام Azure PowerShell

توضح هذه المقالة كيفية إنشاء جهاز ظاهري Azure DevTest Labs (VM) في معمل باستخدام Azure PowerShell. يمكنك استخدام البرامج النصية PowerShell لأتمتة إنشاء الجهاز الظاهري للمختبر.

المتطلبات الأساسية

تحتاج إلى المتطلبات الأساسية التالية للعمل من خلال هذه المقالة:

البرنامج النصي لإنشاء PowerShell VM

يستدعي أمر Cmdlet PowerShellInvoke-AzResourceActioncreateEnvironment الإجراء مع معرف مورد المختبر ومعلمات الجهاز الظاهري. المعلمات موجودة في جدول تجزئة يحتوي على جميع خصائص الجهاز الظاهري. تختلف الخصائص لكل نوع من أنواع الأجهزة الظاهرية. للحصول على خصائص نوع الجهاز الظاهري الذي تريده، راجع الحصول على خصائص الجهاز الظاهري.

ينشئ هذا البرنامج النصي النموذجي جهازًا ظاهريًا لمركز بيانات Windows Server 2019. يتضمن النموذج أيضًا خصائص لإضافة قرص بيانات ثان ضمن 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
}

احفظ البرنامج النصي السابق في ملف يسمى Create-LabVirtualMachine.ps1. قم بتشغيل البرنامج النصي باستخدام الأمر التالي. أدخل القيم الخاصة بك للعناصر النائبة.

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

الحصول على خصائص الجهاز الظاهري

يوضح هذا القسم كيفية الحصول على خصائص معينة لنوع الجهاز الظاهري الذي تريد إنشاءه. يمكنك الحصول على الخصائص من قالب Azure Resource Manager (ARM) في مدخل Microsoft Azure، أو عن طريق استدعاء واجهة برمجة تطبيقات DevTest Labs Azure REST.

استخدام مدخل Microsoft Azure للحصول على خصائص الجهاز الظاهري

يؤدي إنشاء جهاز ظاهري في مدخل Microsoft Azure إلى إنشاء قالب Azure Resource Manager (ARM) الذي يعرض خصائص الجهاز الظاهري. بمجرد اختيار قاعدة الجهاز الظاهري، يمكنك رؤية قالب ARM والحصول على الخصائص دون إنشاء الجهاز الظاهري فعليًا. هذه الطريقة هي أسهل طريقة للحصول على وصف الجهاز الظاهري JSON إذا لم يكن لديك بالفعل جهاز ظاهري مختبر من هذا النوع.

  1. في مدخل Microsoft Azure، في صفحة Overview لمختبرك، حدد Add في شريط الأدوات العلوي.

  2. في الصفحة Choose a base، حدد نوع الجهاز الظاهري الذي تريده. اعتمادًا على إعدادات المختبر، يمكن أن تكون قاعدة الجهاز الظاهري صورة Azure Marketplace أو صورة مخصصة أو صيغة أو بيئة.

  3. في صفحة Create lab resource، أضف البيانات الاصطناعية اختياريًا وقم بتكوين أي إعدادات أخرى تريدها في علامات التبويب الإعدادات الأساسيةوالإعدادات المتقدمة.

  4. في علامة التبويب إعدادات متقدمة، حدد عرض قالب ARM في أسفل الصفحة.

  5. في صفحة عرض قالب Azure Resource Manager، راجع قالب JSON لإنشاء الجهاز الظاهري. يحتوي قسم الموارد على خصائص الجهاز الظاهري.

    على سبيل المثال، يحتوي القسم التالي resources على خصائص Windows Server 2022 Datacenter VM:

      "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. انسخ القالب واحفظه لاستخدامه في أتمتة PowerShell المستقبلية، ونقل الخصائص إلى البرنامج النصي لإنشاء PowerShell VM.

استخدام DevTest Labs Azure REST API للحصول على خصائص الجهاز الظاهري

يمكنك أيضًا استدعاء DevTest Labs REST API للحصول على خصائص الأجهزة الظاهرية للمختبر الموجودة. يمكنك استخدام هذه الخصائص لإنشاء المزيد من الأجهزة الظاهرية للمختبر من نفس الأنواع.

  1. في صفحة Virtual Machines - list، حدد Try it أعلى كتلة التعليمات البرمجية الأولى.
  2. في صفحة REST API Try It:
    • ضمن labName، أدخل اسم المختبر الخاص بك.
    • ضمن labResourceGroup، أدخل اسم مجموعة موارد المختبر.
    • ضمن subscriptionId، حدد اشتراك Azure الخاص بالمختبر.
  3. حدد ⁧⁩تشغيل⁧⁩.
  4. في قسم الاستجابة ضمن النص الأساسي، اعرض خصائص جميع الأجهزة الظاهرية الموجودة في المختبر.

تعيين تاريخ انتهاء صلاحية الجهاز الظاهري

في سيناريوهات التدريب والعرض التوضيحي والإخراج التجريبي، يمكنك تجنب التكاليف غير الضرورية عن طريق حذف الأجهزة الظاهرية تلقائيًا في تاريخ معين. يمكنك تعيين خاصية الجهاز الظاهري expirationDate عند إنشاء جهاز ظاهري. يقوم البرنامج النصي لإنشاء PowerShell VM في وقت سابق من هذه المقالة بتعيين تاريخ انتهاء الصلاحية ضمن properties:

  "expirationDate": "2022-12-01"

يمكنك أيضًا تعيين تواريخ انتهاء الصلاحية على الأجهزة الظاهرية الموجودة باستخدام PowerShell. يعين البرنامج النصي PowerShell التالي تاريخ انتهاء صلاحية لجهاز ظاهري مختبر موجود إذا لم يكن لديه تاريخ انتهاء صلاحية بالفعل:

# 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

الخطوات التالية

Az.DevTestLabs PowerShell reference