Creare macchine virtuali DevTest Labs usando Azure PowerShell
Questo articolo illustra come creare una macchina virtuale di Azure DevTest Labs in un lab usando Azure PowerShell. È possibile usare script di PowerShell per automatizzare la creazione di macchine virtuali lab.
Prerequisiti
Sono necessari i prerequisiti seguenti per eseguire questo articolo:
- Accesso a un lab in DevTest Labs. Creare un lab o usare un lab esistente.
- Azure PowerShell. Installare Azure PowerShell o usare Cloud Shell di Azure nell'portale di Azure.
Script di creazione di macchine virtuali di PowerShell
Il cmdlet PowerShell Invoke-AzResourceAction richiama l'azione con l'ID createEnvironment
risorsa del lab e i parametri della macchina virtuale. I parametri si trovano in una tabella hash che contiene tutte le proprietà della macchina virtuale. Le proprietà sono diverse per ogni tipo di macchina virtuale. Per ottenere le proprietà per il tipo di macchina virtuale desiderato, vedere Ottenere le proprietà della macchina virtuale.
Questo script di esempio crea una macchina virtuale windows Server 2019 Datacenter. L'esempio include anche proprietà per aggiungere un secondo disco dati in 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
}
Salvare lo script precedente in un file denominato Create-LabVirtualMachine.ps1. Eseguire lo script usando il comando seguente. Immettere i propri valori per i segnaposto.
.\Create-LabVirtualMachine.ps1 -ResourceGroupName '<lab resource group name>' -LabName '<lab name>' -userName '<VM administrative username>' -password '<VM admin password>' -VMName '<VM name to create>'
Ottenere le proprietà della macchina virtuale
Questa sezione illustra come ottenere le proprietà specifiche per il tipo di macchina virtuale da creare. È possibile ottenere le proprietà da un modello di Azure Resource Manager (ARM) nella portale di Azure o chiamando l'API REST di DevTest Labs.
Usare la portale di Azure per ottenere le proprietà della macchina virtuale
La creazione di una macchina virtuale nel portale di Azure genera un modello di Azure Resource Manager (ARM) che mostra le proprietà della macchina virtuale. Dopo aver scelto una base di macchine virtuali, è possibile visualizzare il modello arm e ottenere le proprietà senza creare effettivamente la macchina virtuale. Questo metodo è il modo più semplice per ottenere la descrizione della macchina virtuale JSON se non si dispone già di una macchina virtuale lab di tale tipo.
Nella portale di Azure nella pagina Panoramica del lab selezionare Aggiungi sulla barra degli strumenti superiore.
Nella pagina Scegliere una base selezionare il tipo di macchina virtuale desiderato. A seconda delle impostazioni del lab, la base della macchina virtuale può essere un'immagine Azure Marketplace, un'immagine personalizzata, una formula o un ambiente.
Nella pagina Crea risorsa lab aggiungere facoltativamente elementi e configurare tutte le altre impostazioni desiderate nelle schede Impostazioni di base e Impostazioni avanzate .
Nella scheda Impostazioni avanzate selezionare Visualizza modello arm nella parte inferiore della pagina.
Nella pagina Visualizza modello di Azure Resource Manager esaminare il modello JSON per la creazione della macchina virtuale. La sezione risorse include le proprietà della macchina virtuale.
La sezione seguente
resources
, ad esempio, contiene le proprietà per una macchina virtuale di 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 } ] } } } } ],
Copiare e salvare il modello da usare in futuro automazione di PowerShell e trasferire le proprietà nello script di creazione della macchina virtuale di PowerShell.
Usare l'API REST di DevTest Labs per ottenere le proprietà della macchina virtuale
È anche possibile chiamare l'API REST devTest Labs per ottenere le proprietà delle macchine virtuali lab esistenti. È possibile usare queste proprietà per creare più macchine virtuali lab degli stessi tipi.
- Nella pagina Macchine virtuali - elenco selezionare Prova sopra il primo blocco di codice.
- Nella pagina DELL'API REST Provare :
- In labName immettere il nome del lab.
- In labResourceGroup immettere il nome del gruppo di risorse lab.
- In subscriptionId selezionare la sottoscrizione di Azure del lab.
- Selezionare Run (Esegui).
- Nella sezione Risposta in Corpo visualizzare le proprietà per tutte le macchine virtuali esistenti nel lab.
Impostare la data di scadenza della macchina virtuale
Negli scenari di training, demo e versione di valutazione è possibile evitare costi non necessari eliminando automaticamente le macchine virtuali in una determinata data. È possibile impostare la proprietà della macchina virtuale quando si crea una macchina virtuale expirationDate
. Lo script di creazione della macchina virtuale powerShell precedente in questo articolo imposta una data di scadenza in properties
:
"expirationDate": "2022-12-01"
È anche possibile impostare le date di scadenza nelle macchine virtuali esistenti usando PowerShell. Lo script di PowerShell seguente imposta una data di scadenza per una macchina virtuale lab esistente se non ha già una data di scadenza:
# 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