Erstellen von DevTest Labs-VMs mithilfe von Azure PowerShell
In diesem Artikel erfahren Sie, wie Sie mithilfe von Azure PowerShell einen Azure DevTest Labs virtuellen Computer (VM) in einem Lab erstellen. Sie können PowerShell-Skripts verwenden, um die Erstellung von Lab-VMs zu automatisieren.
Voraussetzungen
Sie benötigen die folgenden Voraussetzungen, um diesen Artikel durchzuarbeiten:
- Zugang zu einem Lab in DevTest Labs. Erstellen Sie ein Lab oder verwenden Sie ein vorhandenes Lab.
- Azure PowerShell. Installieren Sie Azure PowerShell oderr verwenden Sie Azure Cloud Shell im Azure-Portal.
PowerShell-VM-Erstellungsskript
Das PowerShell-Invoke-AzResourceAction-Cmdlet ruft die createEnvironment
-Aktion mit den Ressourcen-ID- und VM-Parametern des Labs auf. Die Parameter befinden sich in einer Hashtabelle, die alle VM-Eigenschaften enthält. Die Eigenschaften sind für jede Art von VM unterschiedlich. Informationen zum Abrufen der Eigenschaften für den gewünschten VM-Typ finden Sie unter Abrufen von VM-Eigenschaften.
Dieses Beispielskript erstellt eine Windows Server 2019 Datacenter-VM. Das Beispiel enthält auch Eigenschaften zum Hinzufügen eines zweiten Datenträgers unter 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
}
Speichern Sie das vorherige Skript in einer Datei mit dem Namen Create-LabVirtualMachine.ps1. Führen Sie das Skript mit folgendem Befehl aus: Geben Sie Ihre eigenen Werte für die Platzhalter ein.
.\Create-LabVirtualMachine.ps1 -ResourceGroupName '<lab resource group name>' -LabName '<lab name>' -userName '<VM administrative username>' -password '<VM admin password>' -VMName '<VM name to create>'
VM-Eigenschaften abrufen
In diesem Abschnitt erfahren Sie, wie Sie die spezifischen Eigenschaften des VM-Typs erhalten, den Sie erstellen möchten. Sie können die Eigenschaften von einer Azure Resource Manager(ARM)-Vorlage im Azure-Portal abrufen, oder indem Sie die DevTest Labs Azure REST API aufrufen.
Verwenden des Azure-Portal zum Abrufen von VM-Eigenschaften
Beim Erstellen eines virtuellen Computers im Azure-Portal wird eine ARM-Vorlage (Azure Resource Manager) generiert, die die Eigenschaften des virtuellen Computers anzeigt. Nachdem Sie eine VM-Basis ausgewählt haben, können Sie die ARM-Vorlage anzeigen und die Eigenschaften abrufen, ohne den virtuellen Computer tatsächlich zu erstellen. Diese Methode ist die einfachste Möglichkeit, die JSON-VM-Beschreibung abzurufen, wenn Sie noch nicht über eine Lab-VM dieses Typs verfügen.
Wählen Sie im Azure-Portal auf der Seite Übersicht für Ihr Lab auf der oberen Symbolleiste Hinzufügen aus.
Wählen Sie auf der Seite Basis auswählen den gewünschten VM-Typ. Abhängig von den Labeinstellungen kann die VM-Basis ein Azure Marketplace Image, ein benutzerdefiniertes Image, eine Formel oder eine Umgebung sein.
Fügen Sie auf der Seite Labressource erstellen optional Artefakte hinzu, und konfigurieren Sie alle anderen gewünschten Einstellungen auf den Registerkarten Grundeinstellungen und Erweiterte Einstellungen.
Wählen Sie auf der Registerkarte Erweiterte Einstellungen unten auf der Seite ARM-Vorlage anzeigen aus.
Überprüfen Sie auf der Seite Azure Resource Manager-Vorlage anzeigendie JSON-Vorlage zum Erstellen des virtuellen Computers. Der Abschnitt Ressourcen enthält die VM-Eigenschaften.
Der folgende
resources
-Abschnitt enthält beispielsweise die Eigenschaften für eine 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 } ] } } } } ],
Kopieren und speichern Sie die Vorlage für die zukünftige PowerShell-Automatisierung, und übertragen Sie die Eigenschaften an das Erstellungsskript der PowerShell-VM.
Verwenden der DevTest Labs-Azure-REST-API zum Abrufen von VM-Eigenschaften
Sie können auch die DevTest Labs-REST-API aufrufen, um die Eigenschaften vorhandener Lab-VMs abzurufen. Sie können diese Eigenschaften verwenden, um weitere Lab-VMs desselben Typs zu erstellen.
- Wählen Sie auf der Seite Virtual Machines – Liste die Option Ausprobieren über dem ersten Codeblock aus.
- Auf der Seite REST-API ausprobieren:
- Geben Sie unter labName Ihren Labnamen ein.
- Geben Sie unter labResourceGroup den Namen der Labressourcengruppe ein.
- Wählen Sie unter subscriptionId das Azure-Abonnement des Labs aus.
- Klicken Sie auf Run (Ausführen).
- Zeigen Sie im Abschnitt Antwort unter Text die Eigenschaften für alle vorhandenen virtuellen Computer im Lab an.
Festlegen des Ablaufdatums der VM
In Trainings-, Demo- und Testszenarien können Sie unnötige Kosten vermeiden, indem Sie VMs automatisch zu einem bestimmten Datum löschen. Sie können die VM-Eigenschaft expirationDate
festlegen, wenn Sie einen virtuellen Computer erstellen. Das Skript für die PowerShell-VM-Erstellung weiter oben in diesem Artikel legt ein Ablaufdatum unter properties
fest:
"expirationDate": "2022-12-01"
Sie können auch Ablaufdaten auf vorhandenen VMs mithilfe von PowerShell festlegen. Mit dem folgenden PowerShell-Skript wird ein Ablaufdatum für eine vorhandene Lab-VM festgelegt, falls noch kein Ablaufdatum vorkommt:
# 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