Come eseguire il provisioning di macchine virtuali di SQL Server con Azure PowerShellHow to provision SQL Server virtual machines with Azure PowerShell

Questa guida illustra le opzioni necessarie per creare macchine virtuali di Windows SQL Server con Azure PowerShell.This guide explains your options to create Windows SQL Server VMs with Azure PowerShell. Per un esempio semplificato di Azure PowerShell con più valori predefiniti, vedere Creare una macchina virtuale Windows di SQL Server con Azure PowerShell.For a streamlined Azure PowerShell example with more default values, see the SQL VM Azure PowerShell quickstart.

Se non si ha una sottoscrizione di Azure, creare un account gratuito prima di iniziare.If you don't have an Azure subscription, create a free account before you begin.

Questo articolo richiede il modulo Azure PowerShell 3.6 o versioni successive.This article requires the Azure PowerShell module version 3.6 or later. Eseguire Get-Module -ListAvailable AzureRM per trovare la versione.Run Get-Module -ListAvailable AzureRM to find the version. Se è necessario eseguire l'installazione o l'aggiornamento, vedere come installare il modulo Azure PowerShell.If you need to install or upgrade, see Install Azure PowerShell module.

Configurare la sottoscrizioneConfigure your subscription

  1. Aprire PowerShell e accedere all'account Azure eseguendo il comando Connect-AzureRmAccount.Open PowerShell and establish access to your Azure account by running the Connect-AzureRmAccount command.

    Connect-AzureRmAccount
    
  2. Viene visualizzata una schermata di accesso per l'immissione delle credenziali.You should see a sign-in screen to enter your credentials. Utilizzare lo stesso indirizzo email e password utilizzati per accedere al portale di Azure.Use the same email and password that you use to sign in to the Azure portal.

Definire le variabili di immagineDefine image variables

Per semplificare le operazioni di riutilizzo e la creazione degli script, iniziare definendo una serie di variabili.To simplify reuse and script creations, start by defining a number of variables. Cambiare i valori dei parametri in base alla necessità, ma quando si modificano i valori forniti occorre prestare attenzione alle restrizioni di denominazione correlate alle lunghezze dei nomi e ai caratteri speciali.Change the parameter values as you see fit, but beware of naming restrictions related to name lengths and special characters when modifying the values provided.

Posizione e gruppo di risorseLocation and Resource Group

Usare due variabili per definire l'area dei dati e il gruppo di risorse in cui devono essere create le altre risorse per la macchina virtuale.Use two variables to define the data region and the resource group into which you create the other resources for the virtual machine.

Modificare in base alle esigenze specifiche e quindi eseguire i cmdlet seguenti per inizializzare le variabili.Modify as desired and then execute the following cmdlets to initialize these variables.

$Location = "SouthCentralUS"
$ResourceGroupName = "sqlvm2"

Proprietà della risorsa di archiviazioneStorage properties

Usare le variabili seguenti per definire l'account di archiviazione e il tipo di risorsa di archiviazione che devono essere usati dalla macchina virtuale.Use the following variables to define the storage account and the type of storage to be used by the virtual machine.

Modificare in base alle esigenze specifiche e quindi eseguire il cmdlet seguente per inizializzare le variabili.Modify as desired and then execute the following cmdlet to initialize these variables. Si noti che in questo esempio viene usata l' Archiviazione Premium, consigliata per carichi di lavoro di produzione.Note that in this example, we are using Premium Storage, which is recommended for production workloads.

$StorageName = $ResourceGroupName + "storage"
$StorageSku = "Premium_LRS"

Proprietà di reteNetwork properties

Usare le variabili seguenti per definire l'interfaccia di rete, il metodo di allocazione TCP/IP, il nome della rete virtuale, il nome della subnet virtuale, l'intervallo di indirizzi IP per la rete virtuale, l'intervallo di indirizzi IP per la subnet e l'etichetta del nome del dominio pubblico che devono essere usati dalla rete nella macchina virtuale.Use the following variables to define the network interface, the TCP/IP allocation method, the virtual network name, the virtual subnet name, the range of IP addresses for the virtual network, the range of IP addresses for the subnet, and the public domain name label to be used by the network in the virtual machine.

Modificare in base alle esigenze specifiche e quindi eseguire il cmdlet seguente per inizializzare le variabili.Modify as desired and then execute the following cmdlet to initialize these variables.

$InterfaceName = $ResourceGroupName + "ServerInterface"
$NsgName = $ResourceGroupName + "nsg"
$TCPIPAllocationMethod = "Dynamic"
$VNetName = $ResourceGroupName + "VNet"
$SubnetName = "Default"
$VNetAddressPrefix = "10.0.0.0/16"
$VNetSubnetAddressPrefix = "10.0.0.0/24"
$DomainName = $ResourceGroupName

Proprietà della macchina virtualeVirtual machine properties

Usare le variabili seguenti per definire il nome della macchina virtuale, il nome del computer, le dimensioni della macchina virtuale e il nome del disco del sistema operativo per la macchina virtuale.Use the following variables to define the virtual machine name, the computer name, the virtual machine size, and the operating system disk name for the virtual machine.

Modificare in base alle esigenze specifiche e quindi eseguire il cmdlet seguente per inizializzare le variabili.Modify as desired and then execute the following cmdlet to initialize these variables.

$VMName = $ResourceGroupName + "VM"
$ComputerName = $ResourceGroupName + "Server"
$VMSize = "Standard_DS13"
$OSDiskName = $VMName + "OSDisk"

Scegliere un'immagine di SQL ServerChoose a SQL Server image

Usare le variabili seguenti per definire l'immagine di SQL Server da usare per la macchina virtuale.Use the following variables to define the SQL Server image to use for the virtual machine.

  1. Per prima cosa, visualizzare l'elenco completo delle immagini di SQL Server disponibili con il comando Get-AzureRmVMImageOffer:First, list out all of the SQL Server image offerings with the Get-AzureRmVMImageOffer command:

    Get-AzureRmVMImageOffer -Location $Location -Publisher 'MicrosoftSQLServer'
    
  2. Per questa esercitazione, usare le variabili seguenti per specificare SQL Server 2017 in Windows Server 2016.For this tutorial, use the following variables to specify SQL Server 2017 on Windows Server 2016.

    $OfferName = "SQL2017-WS2016"
    $PublisherName = "MicrosoftSQLServer"
    $Version = "latest"
    
  3. Visualizzare quindi l'elenco delle edizioni disponibili per la propria offerta.Next, list out the available editions for your offer.

    Get-AzureRmVMImageSku -Location $Location -Publisher 'MicrosoftSQLServer' -Offer $OfferName | Select Skus
    
  4. Per questa esercitazione, usare l'edizione SQL Server 2017 Developer (SQLDEV).For this tutorial, use the SQL Server 2017 Developer edition (SQLDEV). L'edizione Developer è concessa in licenza gratuitamente per test e sviluppo e si paga solo il costo di esecuzione della VM.The Developer edition is freely licensed for testing and development, and you only pay for the cost of running the VM.

    $Sku = "SQLDEV"
    

Creare un gruppo di risorseCreate a resource group

Il primo oggetto creato con il modello di distribuzione Resource Manager è il gruppo di risorse.With the Resource Manager deployment model, the first object that you create is the resource group. Usare il cmdlet New-AzureRmResourceGroup per creare un gruppo di risorse di Azure e le rispettive risorse, con nome e posizione del gruppo di risorse definiti dalle variabili inizializzate in precedenza.Use the New-AzureRmResourceGroup cmdlet to create an Azure resource group and its resources with the resource group name and location defined by the variables that you previously initialized.

Eseguire il cmdlet seguente per creare un nuovo gruppo di risorse.Execute the following cmdlet to create your new resource group.

New-AzureRmResourceGroup -Name $ResourceGroupName -Location $Location

Creare un account di archiviazioneCreate a storage account

La macchina virtuale richiede risorse di archiviazione per il disco del sistema operativo e per i file di dati e di log di SQL Server.The virtual machine requires storage resources for the operating system disk and for the SQL Server data and log files. Per maggiore semplicità, viene creato un singolo disco per entrambi.For simplicity, we create a single disk for both. Successivamente è possibile collegare dischi aggiuntivi usando il cmdlet Add-Azure Disk per posizionare i file di dati e di log di SQL Server in dischi dedicati.You can attach additional disks later using the Add-Azure Disk cmdlet in order to place your SQL Server data and log files on dedicated disks. Usare il cmdlet New-AzureRmStorageAccount per creare un account di archiviazione standard nel nuovo gruppo di risorse, con il nome dell'account di archiviazione, il nome dello SKU di storage e la posizione definiti usando le variabili inizializzate in precedenza.Use the New-AzureRmStorageAccount cmdlet to create a standard storage account in your new resource group and with the storage account name, storage Sku name, and location defined using the variables that you previously initialized.

Eseguire il cmdlet seguente per creare il nuovo account di archiviazione.Execute the following cmdlet to create your new storage account.

$StorageAccount = New-AzureRmStorageAccount -ResourceGroupName $ResourceGroupName `
   -Name $StorageName -SkuName $StorageSku `
   -Kind "Storage" -Location $Location

Suggerimento

La creazione dell'account di archiviazione può richiedere alcuni minuti.Creating the storage account can take a few minutes.

Creare risorse di reteCreate network resources

La macchina virtuale richiede alcune risorse di rete per la connettività di rete.The virtual machine requires a number of network resources for network connectivity.

  • Ogni macchina virtuale richiede una rete virtuale.Each virtual machine requires a virtual network.
  • In una rete virtuale deve essere definita almeno una subnet.A virtual network must have at least one subnet defined.
  • È necessario che sia definita un'interfaccia di rete con un indirizzo IP pubblico o privato.A network interface must be defined with either a public or a private IP address.

Creare una configurazione di subnet di rete virtualeCreate a virtual network subnet configuration

Per prima cosa, creare una configurazione di subnet per la rete virtuale.Start by creating a subnet configuration for our virtual network. Per questa esercitazione viene creata una subnet predefinita mediante il cmdlet New-AzureRmVirtualNetworkSubnetConfig.For our tutorial, we create a default subnet using the New-AzureRmVirtualNetworkSubnetConfig cmdlet. La configurazione della subnet di rete virtuale viene creata con il nome di subnet e il prefisso di indirizzo definiti usando le variabili inizializzate in precedenza.We create our virtual network subnet configuration with the subnet name and address prefix defined using the variables that you previously initialized.

Nota

È possibile definire altre proprietà della configurazione della subnet della rete virtuale usando questo cmdlet, ma questa operazione non rientra nell'ambito dell'esercitazione.You can define additional properties of the virtual network subnet configuration using this cmdlet, but that is beyond the scope of this tutorial.

Eseguire il cmdlet seguente per creare la configurazione di subnet virtuale.Execute the following cmdlet to create your virtual subnet configuration.

$SubnetConfig = New-AzureRmVirtualNetworkSubnetConfig -Name $SubnetName -AddressPrefix $VNetSubnetAddressPrefix

Crea rete virtualeCreate a virtual network

Si crea quindi la rete virtuale mediante il cmdlet New-AzureRmVirtualNetwork.Next, Create your virtual network using the New-AzureRmVirtualNetwork cmdlet. Creare la rete virtuale nel nuovo gruppo di risorse, con nome, posizione e prefisso di indirizzo definiti usando le variabili inizializzate in precedenza e con la configurazione di subnet definita nel passaggio precedente.Create the virtual network in your new resource group, with the name, location, and address prefix defined using the variables that you previously initialized, and using the subnet configuration that you defined in the previous step.

Eseguire il cmdlet seguente per creare la rete virtuale.Execute the following cmdlet to create your virtual network.

$VNet = New-AzureRmVirtualNetwork -Name $VNetName `
   -ResourceGroupName $ResourceGroupName -Location $Location `
   -AddressPrefix $VNetAddressPrefix -Subnet $SubnetConfig

Creare l'indirizzo IP pubblicoCreate the public IP address

Dopo avere definito la rete virtuale, è necessario configurare un indirizzo IP per la connettività alla macchina virtuale.Now that we have our virtual network defined, we need to configure an IP address for connectivity to the virtual machine. Per questa esercitazione viene creato un indirizzo IP pubblico mediante indirizzi IP dinamici per supportare la connettività Internet.For this tutorial, we create a public IP address using dynamic IP addressing to support Internet connectivity. Usare il cmdlet New-AzureRmPublicIpAddress per creare l'indirizzo IP pubblico nel gruppo di risorse creato in precedenza e con nome, posizione, metodo di allocazione ed etichetta del nome di dominio DNS definiti usando le variabili inizializzate in precedenza.Use the New-AzureRmPublicIpAddress cmdlet to create the public IP address in the resource group created previously and with the name, location, allocation method, and DNS domain name label defined using the variables that you previously initialized.

Nota

È possibile definire altre proprietà dell'indirizzo IP pubblico usando questo cmdlet, ma questa operazione non rientra nell'ambito dell'esercitazione.You can define additional properties of the public IP address using this cmdlet, but that is beyond the scope of this initial tutorial. È anche possibile creare un indirizzo privato o un indirizzo di tipo statico, ma anche questa procedura non rientra nell'ambito dell'esercitazione.You could also create a private address or an address with a static address, but that is also beyond the scope of this tutorial.

Eseguire il cmdlet seguente per creare l'indirizzo IP pubblico.Execute the following cmdlet to create your public IP address.

$PublicIp = New-AzureRmPublicIpAddress -Name $InterfaceName `
   -ResourceGroupName $ResourceGroupName -Location $Location `
   -AllocationMethod $TCPIPAllocationMethod -DomainNameLabel $DomainName

Creare il gruppo di sicurezza di reteCreate the network security group

Per proteggere la macchina virtuale e il traffico di SQL Server, creare un gruppo di sicurezza di rete.To secure the VM and SQL Server traffic, create a network security group.

  1. Per prima cosa, creare una regola del gruppo di sicurezza di rete per RDP in modo da consentire connessioni desktop remote.First, create a network security group rule for RDP to allow remote desktop connections.

    $NsgRuleRDP = New-AzureRmNetworkSecurityRuleConfig -Name "RDPRule" -Protocol Tcp `
       -Direction Inbound -Priority 1000 -SourceAddressPrefix * -SourcePortRange * `
       -DestinationAddressPrefix * -DestinationPortRange 3389 -Access Allow
    
  2. Configurare una regola del gruppo di sicurezza di rete che consenta il traffico sulla porta TCP 1433,Configure a network security group rule that allows traffic on TCP port 1433. in modo da permettere connessioni a SQL Server tramite Internet.This enables connections to SQL Server over the internet.

    $NsgRuleSQL = New-AzureRmNetworkSecurityRuleConfig -Name "MSSQLRule"  -Protocol Tcp `
       -Direction Inbound -Priority 1001 -SourceAddressPrefix * -SourcePortRange * `
       -DestinationAddressPrefix * -DestinationPortRange 1433 -Access Allow
    
  3. Creare quindi il gruppo di sicurezza di rete.Then create the network security group.

    $Nsg = New-AzureRmNetworkSecurityGroup -ResourceGroupName $ResourceGroupName `
       -Location $Location -Name $NsgName `
       -SecurityRules $NsgRuleRDP,$NsgRuleSQL
    

Creare l'interfaccia di reteCreate the network interface

È ora possibile creare l'interfaccia di rete che verrà usata dalla macchina virtuale.We are now ready to create the network interface that our virtual machine will use. Viene chiamato il cmdlet New-AzureRmNetworkInterface per creare l'interfaccia di rete nel gruppo di risorse creato in precedenza e con nome, posizione, subnet e indirizzo IP pubblico definiti in precedenza.We call the New-AzureRmNetworkInterface cmdlet to create our network interface in the resource group created earlier and with the name, location, subnet and public IP address previously defined.

Eseguire il cmdlet seguente per creare l'interfaccia di rete.Execute the following cmdlet to create your network interface.

$Interface = New-AzureRmNetworkInterface -Name $InterfaceName `
   -ResourceGroupName $ResourceGroupName -Location $Location `
   -SubnetId $VNet.Subnets[0].Id -PublicIpAddressId $PublicIp.Id `
   -NetworkSecurityGroupId $Nsg.Id

Configurare un oggetto VMConfigure a VM object

Dopo avere definito le risorse di archiviazione e di rete, è possibile definire le risorse di calcolo per la macchina virtuale.Now that we have storage and network resources defined, we are ready to define compute resources for the virtual machine. Per questa esercitazione vengono specificate le dimensioni della macchina virtuale e alcune proprietà del sistema operativo, viene specificata l'interfaccia di rete creata in precedenza, viene definito l'archivio BLOB e viene quindi specificato il disco del sistema operativo.For our tutorial, we specify the virtual machine size and various operating system properties, specify the network interface that we previously created, define blob storage, and then specify the operating system disk.

Creare l'oggetto macchina virtualeCreate the VM object

Specificare prima di tutto le dimensioni della macchina virtuale.Start by specifying the virtual machine size. Per questa esercitazione verrà specificata l'opzione DS13.For this tutorial, we are specifying a DS13. Viene chiamato il cmdlet New-AzureRmVMConfig per creare un oggetto macchina virtuale configurabile con nome e dimensioni definiti usando le variabili inizializzate in precedenza.We call the New-AzureRmVMConfig cmdlet to create a configurable virtual machine object with the name and size defined using the variables that you previously initialized.

Eseguire il cmdlet seguente per creare l'oggetto macchina virtuale.Execute the following cmdlet to create the virtual machine object.

$VirtualMachine = New-AzureRmVMConfig -VMName $VMName -VMSize $VMSize

Creare un oggetto credenziali per includere il nome e la password per le credenziali di amministratore localeCreate a credential object to hold the name and password for the local administrator credentials

Prima di configurare le proprietà del sistema operativo per la macchina virtuale, è necessario specificare le credenziali per l'account di amministratore locale sotto forma di stringa sicura.Before we can set the operating system properties for the virtual machine, we need to supply the credentials for the local administrator account as a secure string. Per eseguire questa operazione usare il cmdlet Get-Credential.To accomplish this, use the Get-Credential cmdlet.

Eseguire il cmdlet seguente e nella finestra della richiesta di credenziali di PowerShell immettere il nome e la password da usare per l'account di amministratore locale nella macchina virtuale.Execute the following cmdlet and, in the PowerShell credential request window, type the name and password to use for the local administrator account in the virtual machine.

$Credential = Get-Credential -Message "Type the name and password of the local administrator account."

Configurare le proprietà del sistema operativo per la macchina virtualeSet the operating system properties for the virtual machine

È ora possibile configurare le proprietà del sistema operativo per la macchina virtuale usando il cmdlet Set-AzureRmVMOperatingSystem per configurare il tipo di sistema operativo come Windows, richiedere l'installazione dell'agente di macchine virtuali, specificare che il cmdlet abilita l'aggiornamento automatico e configurare il nome della macchina virtuale, il nome del computer e le credenziali usando le variabili inizializzate in precedenza.Now we are ready to set the virtual machine's operating system properties with Set-AzureRmVMOperatingSystem cmdlet to set the type of operating system as Windows, require the virtual machine agent to be installed, specify that the cmdlet enables auto update and set the virtual machine name, the computer name, and the credential using the variables that you previously initialized.

Eseguire il cmdlet seguente per configurare le proprietà del sistema operativo per la macchina virtuale.Execute the following cmdlet to set the operating system properties for your virtual machine.

$VirtualMachine = Set-AzureRmVMOperatingSystem -VM $VirtualMachine `
   -Windows -ComputerName $ComputerName -Credential $Credential `
   -ProvisionVMAgent -EnableAutoUpdate

Aggiungere l'interfaccia di rete alla macchina virtualeAdd the network interface to the virtual machine

Si aggiunge quindi alla macchina virtuale l'interfaccia di rete creata in precedenza.Next, we add the network interface that we created previously to the virtual machine. Chiamare il cmdlet Add-AzureRmVMNetworkInterface per aggiungere l'interfaccia di rete usando la variabile di interfaccia di rete definita in precedenza.Call the Add-AzureRmVMNetworkInterface cmdlet to add the network interface using the network interface variable that you defined earlier.

Eseguire il cmdlet seguente per configurare l'interfaccia di rete per la macchina virtuale.Execute the following cmdlet to set the network interface for your virtual machine.

$VirtualMachine = Add-AzureRmVMNetworkInterface -VM $VirtualMachine -Id $Interface.Id

Impostare la posizione dell'archivio BLOB per il disco da usare per la macchina virtualeSet the blob storage location for the disk to be used by the virtual machine

Si imposta quindi la posizione dell'archivio BLOB per il disco che verrà usato dalla macchina virtuale specificando le variabili definite in precedenza.Next, set the blob storage location for the disk to be used by the virtual machine using the variables that you defined earlier.

Eseguire il cmdlet seguente per impostare la posizione dell'archivio BLOB.Execute the following cmdlet to set the blob storage location.

$OSDiskUri = $StorageAccount.PrimaryEndpoints.Blob.ToString() + "vhds/" + $OSDiskName + ".vhd"

Configurare le proprietà del disco del sistema operativo per la macchina virtualeSet the operating system disk properties for the virtual machine

Si configurano quindi le proprietà del disco del sistema operativo per la macchina virtuale.Next, set the operating system disk properties for the virtual machine. Usare il cmdlet Set-AzureRmVMOSDisk per specificare che il sistema operativo per la macchina virtuale deriverà da un'immagine, per configurare la memorizzazione nella cache su sola lettura, perché SQL Server viene installato nello stesso disco e per definire il nome della macchina virtuale e il disco del sistema operativo specificati usando le variabili definite in precedenza.Use the Set-AzureRmVMOSDisk cmdlet to specify that the operating system for the virtual machine will come from an image, to set caching to read only (because SQL Server is being installed on the same disk) and define the virtual machine name and the operating system disk defined using the variables that we defined earlier.

Eseguire il cmdlet seguente per configurare le proprietà del disco del sistema operativo per la macchina virtuale.Execute the following cmdlet to set the operating system disk properties for your virtual machine.

$VirtualMachine = Set-AzureRmVMOSDisk -VM $VirtualMachine -Name `
   $OSDiskName -VhdUri $OSDiskUri -Caching ReadOnly -CreateOption FromImage

Specificare l'immagine di piattaforma per la macchina virtualeSpecify the platform image for the virtual machine

L'ultimo passaggio della configurazione consiste nello specificare l'immagine di piattaforma per la macchina virtuale.Our last configuration step is to specify the platform image for our virtual machine. Per l'esercitazione viene usata l'immagine più recente per SQL Server 2016 CTP.For our tutorial, we are using the latest SQL Server 2016 CTP image. Usare il cmdlet Set-AzureRmVMSourceImage per usare questa immagine in base a quanto definito dalle variabili definite in precedenza.Use the Set-AzureRmVMSourceImage cmdlet to use this image as defined by the variables that you defined earlier.

Eseguire il cmdlet seguente per specificare l'immagine di piattaforma per la macchina virtuale.Execute the following cmdlet to specify the platform image for your virtual machine.

$VirtualMachine = Set-AzureRmVMSourceImage -VM $VirtualMachine `
   -PublisherName $PublisherName -Offer $OfferName `
   -Skus $Sku -Version $Version

Creare la macchina virtuale SQLCreate the SQL VM

Al termine della procedura di configurazione, è possibile creare la macchina virtuale.Now that you have finished the configuration steps, you are ready to create the virtual machine. Usare il cmdlet New-AzureRmVM per creare la macchina virtuale usando le variabili definite.Use the New-AzureRmVM cmdlet to create the virtual machine using the variables that we have defined.

Eseguire il cmdlet seguente per creare la macchina virtuale.Execute the following cmdlet to create your virtual machine.

New-AzureRmVM -ResourceGroupName $ResourceGroupName -Location $Location -VM $VirtualMachine

La macchina virtuale viene creata.The virtual machine is created.

Nota

È possibile ignorare l'errore sulla diagnostica di avvio.You can ignore the error about the boot diagnostics. Viene creato un account di archiviazione standard per la diagnostica dell'avvio, perché l'account di archiviazione specificato per il disco della macchina virtuale è un account di archiviazione Premium.A standard storage account is created for boot diagnostics, because the specified storage account for the virtual machine's disk is a premium storage account.

Installare SQL Iaas AgentInstall the SQL Iaas Agent

Le macchine virtuali di SQL Server supportano funzionalità di gestione automatica mediante l'estensione SQL Server IaaS Agent.SQL Server virtual machines support automated management features with the SQL Server IaaS Agent Extension. Per installare l'agente sulla nuova VM, eseguire il comando seguente dopo la creazione.To install the agent on the new VM, run the following command after it is created.

Set-AzureRmVMSqlServerExtension -ResourceGroupName $ResourceGroupName -VMName $VMName -name "SQLIaasExtension" -version "1.2" -Location $Location

Rimuovere una macchina virtuale di testRemove a test VM

Se non è necessario che la VM sia continuamente in esecuzione, è possibile evitare addebiti superflui arrestandola quando non è in uso.If you do not need the VM running continually, you can avoid unnecessary charges by stopping it when not in use. Il comando seguente arresta la VM ma la lascia disponibile per un uso futuro.The following command stops the VM but leaves it available for future use.

Stop-AzureRmVM -Name $VMName -ResourceGroupName $ResourceGroupName

È anche possibile eliminare definitivamente tutte le risorse associate alla macchina virtuale con il comando Remove-AzureRmResourceGroup.You can also permanently delete all resources associated with the virtual machine with the Remove-AzureRmResourceGroup command. In questo modo viene eliminata definitivamente anche la macchina virtuale, quindi usare questo comando con cautela.This permanently deletes the virtual machine as well, so use this command with care.

Script di esempioExample script

Lo script seguente contiene lo script PowerShell completo per l'esercitazione.The following script contains the complete PowerShell script for this tutorial. Si presuppone che sia già stata impostata la sottoscrizione di Azure da usare con i comandi Connect-AzureRmAccount e Select-AzureRmSubscription.It assumes that you have already setup the Azure subscription to use with the Connect-AzureRmAccount and Select-AzureRmSubscription commands.

# Variables

## Global
$Location = "SouthCentralUS"
$ResourceGroupName = "sqlvm2"

## Storage
$StorageName = $ResourceGroupName + "storage"
$StorageSku = "Premium_LRS"

## Network
$InterfaceName = $ResourceGroupName + "ServerInterface"
$NsgName = $ResourceGroupName + "nsg"
$VNetName = $ResourceGroupName + "VNet"
$SubnetName = "Default"
$VNetAddressPrefix = "10.0.0.0/16"
$VNetSubnetAddressPrefix = "10.0.0.0/24"
$TCPIPAllocationMethod = "Dynamic"
$DomainName = $ResourceGroupName

##Compute
$VMName = $ResourceGroupName + "VM"
$ComputerName = $ResourceGroupName + "Server"
$VMSize = "Standard_DS13"
$OSDiskName = $VMName + "OSDisk"

##Image
$PublisherName = "MicrosoftSQLServer"
$OfferName = "SQL2017-WS2016"
$Sku = "SQLDEV"
$Version = "latest"

# Resource Group
New-AzureRmResourceGroup -Name $ResourceGroupName -Location $Location

# Storage
$StorageAccount = New-AzureRmStorageAccount -ResourceGroupName $ResourceGroupName -Name $StorageName -SkuName $StorageSku -Kind "Storage" -Location $Location

# Network
$SubnetConfig = New-AzureRmVirtualNetworkSubnetConfig -Name $SubnetName -AddressPrefix $VNetSubnetAddressPrefix
$VNet = New-AzureRmVirtualNetwork -Name $VNetName -ResourceGroupName $ResourceGroupName -Location $Location -AddressPrefix $VNetAddressPrefix -Subnet $SubnetConfig
$PublicIp = New-AzureRmPublicIpAddress -Name $InterfaceName -ResourceGroupName $ResourceGroupName -Location $Location -AllocationMethod $TCPIPAllocationMethod -DomainNameLabel $DomainName
$NsgRuleRDP = New-AzureRmNetworkSecurityRuleConfig -Name "RDPRule" -Protocol Tcp -Direction Inbound -Priority 1000 -SourceAddressPrefix * -SourcePortRange * -DestinationAddressPrefix * -DestinationPortRange 3389 -Access Allow
$NsgRuleSQL = New-AzureRmNetworkSecurityRuleConfig -Name "MSSQLRule"  -Protocol Tcp -Direction Inbound -Priority 1001 -SourceAddressPrefix * -SourcePortRange * -DestinationAddressPrefix * -DestinationPortRange 1433 -Access Allow
$Interface = New-AzureRmNetworkInterface -Name $InterfaceName -ResourceGroupName $ResourceGroupName -Location $Location -SubnetId $VNet.Subnets[0].Id -PublicIpAddressId $PublicIp.Id -NetworkSecurityGroupId $Nsg.Id

# Compute
$VirtualMachine = New-AzureRmVMConfig -VMName $VMName -VMSize $VMSize
$Credential = Get-Credential -Message "Type the name and password of the local administrator account."
$VirtualMachine = Set-AzureRmVMOperatingSystem -VM $VirtualMachine -Windows -ComputerName $ComputerName -Credential $Credential -ProvisionVMAgent -EnableAutoUpdate #-TimeZone = $TimeZone
$VirtualMachine = Add-AzureRmVMNetworkInterface -VM $VirtualMachine -Id $Interface.Id
$OSDiskUri = $StorageAccount.PrimaryEndpoints.Blob.ToString() + "vhds/" + $OSDiskName + ".vhd"
$VirtualMachine = Set-AzureRmVMOSDisk -VM $VirtualMachine -Name $OSDiskName -VhdUri $OSDiskUri -Caching ReadOnly -CreateOption FromImage

# Image
$VirtualMachine = Set-AzureRmVMSourceImage -VM $VirtualMachine -PublisherName $PublisherName -Offer $OfferName -Skus $Sku -Version $Version

# Create the VM in Azure
New-AzureRmVM -ResourceGroupName $ResourceGroupName -Location $Location -VM $VirtualMachine

# Add the SQL IaaS Extension
Set-AzureRmVMSqlServerExtension -ResourceGroupName $ResourceGroupName -VMName $VMName -name "SQLIaasExtension" -version "1.2" -Location $Location

Passaggi successiviNext steps

Dopo aver creato la macchina virtuale, è possibile:After the virtual machine is created, you can: