Create a lab in Azure Lab Services using PowerShell and the Azure module
Important
Azure Lab Services will be retired on June 28, 2027. For more information, see the retirement guide.
In this article, you learn how to create a lab using PowerShell and the Azure modules. The lab uses the settings from a previously created lab plan. For detailed overview of Azure Lab Services, see An introduction to Azure Lab Services.
Prerequisites
- An Azure account with an active subscription. If you don't have an Azure subscription, create a free account before you begin.
- An Azure account with permission to manage a lab, such as the Lab Creator, Owner, Contributor, or Lab Services Contributor Azure RBAC role. Learn more about the Azure Lab Services built-in roles and assignment scopes.
- An Azure lab plan. If you don't have a lab plan yet, follow the steps in Quickstart: Set up resources to create labs.
Azure Az PowerShell module. Must be version 7.2 or higher.
Install-Module 'Az'
Az.LabServices PowerShell module.
Install-Module 'Az.LabServices'
Lab plan. To create a lab plan, see Create a lab plan using PowerShell and the Azure modules.
Run Connect-AzAccount to sign in to Azure and verify an active subscription.
Create a lab
Before you can create a lab, you need the lab plan resource. In the create a lab plan by using PowerShell, you learn how to create a lab plan named ContosoLabPlan
in a resource group named MyResourceGroup
.
$plan = Get-AzLabServicesLabPlan `
-Name "ContosoLabPlan" `
-ResourceGroupName "MyResourceGroupName"
We also need to choose a base image for the lab VMs from the available images for the lab plan. Let's see what is available.
$plan | Get-AzLabServicesPlanImage | Where-Object { $_.EnabledState.ToString() -eq "enabled" }
We'll choose the Windows 11 image.
$image = $plan | Get-AzLabServicesPlanImage | Where-Object { $_.EnabledState.ToString() -eq "enabled" -and $_.DisplayName -eq "Windows 11 Pro (Gen2)" }
When you create a lab by using PowerShell, you also need to provide the resource SKU information. The following command uses the REST API to retrieve the list of SKUs and selects the Classic_Fsv2_4_8GB_128_S_SSD
SKU:
$subscriptionId = (Get-AzContext).Subscription.ID
$skus = (Invoke-AzRestMethod -Uri https://management.azure.com/subscriptions/$subscriptionId/providers/Microsoft.LabServices/skus?api-version=2022-08-01 | Select-Object -Property "Content" -ExpandProperty Content | ConvertFrom-Json).value
$sku = $skus | Where-Object -Property "name" -eq "Classic_Fsv2_4_8GB_128_S_SSD" | select-object -First 1
We're now ready to create a lab based of our lab plan with the Window 11 Pro image and the Classic_Fsv2_4_8GB_128_S_SSD
resource SKU. The following command will create a lab using the lab plan created above.
# $plan and $image are from the Create LabPlan QuickStart.
$password = "<custom password>"
$lab = New-AzLabServicesLab -Name "ContosoLab" `
-ResourceGroupName "MyResourceGroup" `
-Location "westus" `
-LabPlanId $plan.Id `
-AdminUserPassword (ConvertTo-SecureString $password -AsPlainText -Force) `
-AdminUserUsername "adminUser" `
`
-AutoShutdownProfileShutdownOnDisconnect Enabled `
-AutoShutdownProfileDisconnectDelay $(New-Timespan) `
-AutoShutdownProfileShutdownOnIdle "LowUsage" `
-AutoShutdownProfileIdleDelay $(New-TimeSpan -Minutes 15) `
-AutoShutdownProfileShutdownWhenNotConnected Disabled `
-AutoShutdownProfileNoConnectDelay $(New-TimeSpan -Minutes 15) `
`
-ConnectionProfileClientRdpAccess Public `
-ConnectionProfileClientSshAccess None `
-ConnectionProfileWebRdpAccess None `
-ConnectionProfileWebSshAccess None `
-SecurityProfileOpenAccess Disabled `
`
-ImageReferenceOffer $image.Offer `
-ImageReferencePublisher $image.Publisher `
-ImageReferenceSku $image.Sku `
-ImageReferenceVersion $image.Version `
-SkuCapacity 1 `
-SkuName $sku.size `
`
-Title "Contoso Lab" `
-Description "The Contoso lab" `
-AdditionalCapabilityInstallGpuDriver Disabled `
-VirtualMachineProfileCreateOption "TemplateVM" `
-VirtualMachineProfileUseSharedPassword Enabled
Clean up resources
If you're not going to continue to use this application, delete the plan and lab with the following steps:
$lab | Remove-AzLabServicesLab
More information
As an admin, you can learn more about Azure PowerShell module and Az.LabServices cmdlets.