Skapa virtuella DevTest Labs-datorer med hjälp av Azure PowerShell
Den här artikeln visar hur du skapar en Azure DevTest Labs virtuell dator (VM) i ett labb med hjälp av Azure PowerShell. Du kan använda PowerShell-skript för att automatisera skapandet av labb-VM.
Förutsättningar
Du behöver följande förutsättningar för att gå igenom den här artikeln:
- Åtkomst till ett labb i DevTest Labs. Skapa ett labb eller använd ett befintligt labb.
- Azure PowerShell. Installera Azure PowerShell eller använd Azure Cloud Shell i Azure Portal.
Skapa skript för virtuell PowerShell-dator
PowerShell-cmdleten Invoke-AzResourceAction anropar createEnvironment
åtgärden med labbets resurs-ID och VM-parametrar. Parametrarna finns i en hash-tabell som innehåller alla vm-egenskaper. Egenskaperna är olika för varje typ av virtuell dator. Information om hur du hämtar egenskaperna för den vm-typ du vill använda finns i Hämta VM-egenskaper.
Det här exempelskriptet skapar en virtuell Windows Server 2019 Datacenter-dator. Exemplet innehåller även egenskaper för att lägga till en andra datadisk under 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
}
Spara föregående skript i en fil med namnet Create-LabVirtualMachine.ps1. Kör skriptet med hjälp av följande kommando. Ange dina egna värden för platshållarna.
.\Create-LabVirtualMachine.ps1 -ResourceGroupName '<lab resource group name>' -LabName '<lab name>' -userName '<VM administrative username>' -password '<VM admin password>' -VMName '<VM name to create>'
Hämta VM-egenskaper
Det här avsnittet visar hur du hämtar de specifika egenskaperna för den typ av virtuell dator som du vill skapa. Du kan hämta egenskaperna från en ARM-mall (Azure Resource Manager) i Azure Portal eller genom att anropa DevTest Labs Azure REST API.
Använd Azure Portal för att hämta egenskaper för virtuella datorer
När du skapar en virtuell dator i Azure Portal genereras en Arm-mall (Azure Resource Manager) som visar den virtuella datorns egenskaper. När du har valt en VM-bas kan du se ARM-mallen och hämta egenskaperna utan att skapa den virtuella datorn. Den här metoden är det enklaste sättet att hämta beskrivningen av den virtuella JSON-datorn om du inte redan har en virtuell labbdator av den typen.
I Azure Portal går du till sidan Översikt för ditt labb och väljer Lägg till i det översta verktygsfältet.
På sidan Välj en bas väljer du den VM-typ som du vill använda. Beroende på labbinställningarna kan den virtuella datorns bas vara en Azure Marketplace avbildning, en anpassad avbildning, en formel eller en miljö.
På sidan Skapa labbresurskan du lägga till artefakter och konfigurera andra inställningar som du vill på flikarna Grundläggande inställningar och Avancerade inställningar .
På fliken Avancerade inställningar väljer du Visa ARM-mall längst ned på sidan.
På sidan Visa Azure Resource Manager-mall granskar du JSON-mallen för att skapa den virtuella datorn. Resursavsnittet innehåller egenskaperna för den virtuella datorn.
I följande
resources
avsnitt finns till exempel egenskaperna för en virtuell Windows Server 2022 Datacenter-dator:"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 } ] } } } } ],
Kopiera och spara mallen som ska användas i framtida PowerShell-automatisering och överför egenskaperna till skriptet för att skapa virtuella PowerShell-datorer.
Använda DevTest Labs Azure REST API för att hämta VM-egenskaper
Du kan också anropa Rest-API:et för DevTest Labs för att hämta egenskaperna för befintliga virtuella labbdatorer. Du kan använda dessa egenskaper för att skapa fler virtuella labbdatorer av samma typer.
- På sidan Virtual Machines – lista väljer du Prova ovanför det första kodblocket.
- På sidan Testa REST-API: et:
- Under labName anger du ditt labbnamn.
- Under labResourceGroup anger du namnet på labbresursgruppen.
- Under subscriptionId väljer du labbets Azure-prenumeration.
- Välj Kör.
- I avsnittet Svar under Brödtext visar du egenskaperna för alla befintliga virtuella datorer i labbet.
Ange förfallodatum för virtuell dator
I tränings-, demo- och utvärderingsscenarier kan du undvika onödiga kostnader genom att ta bort virtuella datorer automatiskt vid ett visst datum. Du kan ange vm-egenskapen expirationDate
när du skapar en virtuell dator. Skriptet för att skapa virtuella PowerShell-datorer tidigare i den här artikeln anger ett förfallodatum under properties
:
"expirationDate": "2022-12-01"
Du kan också ange förfallodatum på befintliga virtuella datorer med hjälp av PowerShell. Följande PowerShell-skript anger ett förfallodatum för en befintlig virtuell labbdator om den inte redan har ett utgångsdatum:
# 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