Creare una risorsa di Azure tramite script in Azure PowerShell

Completato

In modalità interattiva PowerShell consente di scrivere i comandi ed eseguirli immediatamente.

Ricordare che l'obiettivo complessivo dell'esempio relativo alla soluzione CRM (Customer Relationship Management) è di creare tre ambienti di test contenenti le macchine virtuali. Vengono usati i gruppi di risorse per assicurarsi che le macchine virtuali siano organizzate in ambienti distinti: uno per gli unit test, uno per i test di integrazione e uno per i test di accettazione. È sufficiente creare i gruppi di risorse una sola volta, quindi la modalità interattiva di PowerShell è una scelta ottimale in questo caso d'uso.

Quando vi si immette un comando, PowerShell associa il comando a un cmdlet ed esegue l'azione richiesta. Innanzitutto verranno esaminati alcuni comandi comuni che è possibile usare e poi verrà illustrato come installare il supporto tecnico di Azure per PowerShell.

Che cosa sono i cmdlet di PowerShell?

Un comando di PowerShell viene denominato cmdlet (pronunciato "command-let"). Un cmdlet è un comando che manipola una singola funzione. Il termine cmdlet implica per definizione il concetto di "comando minore". Per convenzione, gli autori di cmdlet sono invitati a mantenere i cmdlet semplici e a scopo singolo.

Il prodotto PowerShell di base viene fornito con cmdlet utilizzabili con funzionalità quali sessioni e processi in background. È possibile aggiungere moduli all'installazione di PowerShell per ottenere cmdlet in grado di manipolare altre funzionalità. Esistono ad esempio moduli di terze parti per l'uso di connessioni FTP, l'amministrazione del sistema operativo, l'accesso al file system e così via.

I cmdlet seguono una convenzione di denominazione verbo-sostantivo; ad esempio, Get-Process, Format-Table e Start-Service. Esiste inoltre una convenzione per la scelta del verbo: "get" per il recupero di dati, "set" per l'inserimento o l'aggiornamento di dati, "format" per la formattazione di dati, "out" per l'indirizzamento dell'output a una destinazione e così via.

Gli autori di cmdlet sono invitati a includere un file della Guida per ogni cmdlet. Il cmdlet Get-Help visualizza il file della Guida per qualsiasi cmdlet. Ad esempio, per ottenere informazioni sul cmdlet Get-ChildItem, immettere l'istruzione seguente in una sessione di Windows PowerShell:

Get-Help -Name Get-ChildItem -Detailed

Che cos'è un modulo di PowerShell?

I cmdlet vengono forniti in moduli. Un modulo di PowerShell è una DLL (libreria di collegamento dinamico) che include il codice per elaborare ogni cmdlet disponibile. I cmdlet vengono caricati in PowerShell caricando il modulo in cui sono contenuti. È possibile ottenere un elenco dei moduli caricati tramite il comando Get-Module:

Get-Module

Questo comando restituisce un risultato simile al seguente:

ModuleType Version    Name                                ExportedCommands
---------- -------    ----                                ----------------
Manifest   3.1.0.0    Microsoft.PowerShell.Management     {Add-Computer, Add-Content, Checkpoint-Computer, Clear-Con...
Manifest   3.1.0.0    Microsoft.PowerShell.Utility        {Add-Member, Add-Type, Clear-Variable, Compare-Object...}
Binary     1.0.0.1    PackageManagement                   {Find-Package, Find-PackageProvider, Get-Package, Get-Pack...
Script     1.0.0.1    PowerShellGet                       {Find-Command, Find-DscResource, Find-Module, Find-RoleCap...
Script     2.0.0      PSReadline                          {Get-PSReadLineKeyHandler, Get-PSReadLineOption, Remove-PS...

Che cos'è il modulo Az di PowerShell?

Az è il nome formale del modulo di Azure PowerShell contenente i cmdlet necessari per usare le funzionalità di Azure. Contiene centinaia di cmdlet che consentono di controllare praticamente ogni aspetto di ogni risorsa di Azure. È possibile lavorare con i gruppi di risorse, la risorsa di archiviazione, le macchine virtuali, Microsoft Entra ID, i contenitori, l'apprendimento automatico e così via. Il modulo Az è un componente open source disponibile in GitHub.

Nota

È possibile che i comandi di Azure PowerShell che usano un formato -AzureRM siano già stati visti o usati. Poiché i moduli Az PowerShell hanno ora tutte le funzionalità dei moduli AzureRM PowerShell e altro ancora, i moduli AzureRM PowerShell verranno ritirati il 29 febbraio 2024. Per evitare interruzioni del servizio, aggiornare gli script che usano i moduli AzureRM PowerShell per usare i moduli Az PowerShell entro il 29 febbraio 2024. Per aggiornare automaticamente gli script, seguire la guida di avvio rapido.

Installare il modulo Az di PowerShell

Il modulo Az di PowerShell è reperibile in un repository globale denominato PowerShell Gallery. È possibile installare il modulo nel computer locale tramite il cmdlet Install-Module.

Per installare il modulo Azure Az PowerShell più recente, eseguire i comandi seguenti:

  1. Aprire il menu Start e immettere PowerShell.

  2. Selezionare l'icona di PowerShell.

  3. Immetti il comando seguente e premi Invio:

    Install-Module -Name Az -Scope CurrentUser -Repository PSGallery
    

Il comando precedente installa il modulo per l'utente corrente, controllato dal parametro Scope.

Il comando si basa su NuGet per recuperare i componenti. Quindi, a seconda della versione installata, potrebbe essere richiesto di scaricare e installare l'ultima versione di NuGet.

NuGet provider is required to continue
PowerShellGet requires NuGet provider version '2.8.5.201' or newer to interact with NuGet-based repositories. The NuGet
 provider must be available in 'C:\Program Files\PackageManagement\ProviderAssemblies' or
'C:\Users\<username>\AppData\Local\PackageManagement\ProviderAssemblies'. You can also install the NuGet provider by running
'Install-PackageProvider -Name NuGet -MinimumVersion 2.8.5.201 -Force'. Do you want PowerShellGet to install and import
 the NuGet provider now?
 [Y] Yes  [N] No  [S] Suspend  [?] Help (default is "Y"):

Immettere Y e premere INVIO.

Per impostazione predefinita, PowerShell Gallery non è configurata come archivio attendibile per PowerShellGet. Ogni volta che si esegue un'installazione da un repository non attendibile, viene richiesto di confermare di voler installare il modulo con l'output seguente:

You are installing the modules from an untrusted repository. If you trust this repository, change its
InstallationPolicy value by running the Set-PSRepository cmdlet. Are you sure you want to install the modules from
'PSGallery'?
[Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help (default is "N"):

Immettere Y o A e premere INVIO.

Esecuzione dello script non riuscita

A seconda della configurazione di sicurezza, Import-Module potrebbe non riuscire con un output simile al seguente:

import-module : File C:\Program Files\PowerShell\Modules\az\6.3.0\Az.psm1 cannot be loaded
because running scripts is disabled on this system. For more information, see about_Execution_Policies at
https:/go.microsoft.com/fwlink/?LinkID=135170.
At line:1 char:1
+ import-module Az
+ ~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : SecurityError: (:) [Import-Module], PSSecurityException
    + FullyQualifiedErrorId : UnauthorizedAccess,Microsoft.PowerShell.Commands.ImportModuleCommand

Potrebbe anche non riuscire senza alcuna risposta. In questo caso, premere CTRL+C per arrestare il programma.

Entrambi i comportamenti indicano in genere che esistono "restrizioni" per i criteri di esecuzione, vale a dire che non è possibile eseguire i moduli scaricati da un'origine esterna, inclusa PowerShell Gallery. È possibile verificare questa condizione eseguendo il cmdlet Get-ExecutionPolicy. Se il cmdlet restituisce "Restricted", allora:

  1. Usare il cmdlet Set-ExecutionPolicy per modificare i criteri impostando "RemoteSigned":

    Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
    

    Viene richiesta l'autorizzazione:

    The execution policy helps protect you from scripts that you do not trust. Changing the execution policy might expose
    you to the security risks described in the about_Execution_Policies help topic at
    https:/go.microsoft.com/fwlink/?LinkID=135170. Do you want to change the execution policy?
    [Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help (default is "N"): Y
    
  2. Immettere Y o A e premere INVIO.

  3. Nel prompt dei comandi usare la freccia in su sulla tastiera ed eseguire di nuovo il comando Install-Module per Azure.

Dovrebbe essere possibile visualizzare il caricamento del modulo Az PowerShell. Al termine, sarà possibile usare Import-Module per caricare i cmdlet.

L'installazione di Azure PowerShell in Linux o macOS usa gli stessi comandi.

  1. In un terminale eseguire il comando seguente per avviare PowerShell.

    pwsh
    
  2. Per installare Azure PowerShell, eseguire il comando seguente nel prompt di PowerShell.

    Install-Module -Name Az -Scope CurrentUser -Repository PSGallery -Force
    
  3. Se viene richiesto se considerare attendibili i moduli di PSGallery, rispondere oppure Sì a tutti.

Aggiornare un modulo di PowerShell

È possibile che venga visualizzato un messaggio di avviso o di errore che indica che è già installata una versione del modulo Azure PowerShell. In tal caso, è possibile eseguire il comando seguente per effettuare l'aggiornamento alla versione più recente.

Update-Module -Name Az

Come nel caso del cmdlet Install-Module, rispondere o Sì a tutti quando viene richiesto se considerare attendibile il modulo. Se si riscontrano problemi con il modulo, è anche possibile usare il comando Update-Module per reinstallarlo.

Esempio: Come creare un gruppo di risorse con Azure PowerShell

Dopo aver installato il modulo di Azure, è possibile iniziare a usare Azure. Si vedrà ora come eseguire un'attività comune: creare un gruppo di risorse. Come è noto, i gruppi di risorse vengono usati per amministrare le risorse correlate. La creazione di un nuovo gruppo di risorse è una delle prime attività che si eseguono quando si avvia una nuova soluzione di Azure.

È necessario eseguire quattro passaggi:

  1. Importare i cmdlet di Azure.

  2. Connettersi alla sottoscrizione di Azure.

  3. Creare il gruppo di risorse.

  4. Verificare che la creazione sia stata eseguita correttamente.

La figura seguente mostra una panoramica di questi passaggi:

Diagram showing the steps to create a resource group.

Ogni passaggio corrisponde a un cmdlet diverso.

Importare i cmdlet di Azure

A partire da PowerShell 3.0, i moduli vengono caricati automaticamente quando si usa un cmdlet all'interno del modulo. Non è più necessario importare manualmente i moduli di PowerShell, a meno che non siano state modificate le impostazioni predefinite di caricamento automatico del modulo.

Connessione

Quando si usa un'installazione locale di Azure PowerShell, è necessario eseguire l'autenticazione prima di poter eseguire i comandi di Azure. Il cmdlet Connect-AzAccount richiede le credenziali di Azure, quindi esegue la connessione alla sottoscrizione di Azure. Include numerosi parametri facoltativi, ma se serve solo un prompt interattivo, i parametri non sono necessari:

Connect-AzAccount

Lavorare con le sottoscrizioni

Se non si ha familiarità con Azure, probabilmente si possiede una singola sottoscrizione. Tuttavia, se si usa Azure già da tempo, è possibile che siano state create più sottoscrizioni di Azure. È possibile configurare Azure PowerShell per eseguire comandi su una determinata sottoscrizione.

È possibile usare attivamente una sola sottoscrizione alla volta. Usare il cmdlet Get-AzContext per determinare quale sottoscrizione è attiva. Se la sottoscrizione non è quella corretta, è possibile modificare le sottoscrizioni usando un altro cmdlet.

  1. Ottenere un elenco di tutti i nomi di sottoscrizione nell'account con il comando Get-AzSubscription.

  2. Cambiare la sottoscrizione passando il nome di quella da selezionare.

Set-AzContext -Subscription '00000000-0000-0000-0000-000000000000'

Se è necessario cercare l'ID sottoscrizione, passare al portale di Azure e nella home page selezionare Sottoscrizioni.

Ottenere un elenco di tutti i gruppi di risorse

È possibile recuperare un elenco di tutti i gruppi di risorse nella sottoscrizione attiva.

Get-AzResourceGroup

Per ottenere una visualizzazione più concisa, è possibile inviare l'output da Get-AzResourceGroup al cmdlet Format-Table usando una barra verticale "|".

Get-AzResourceGroup | Format-Table

L'output è simile al seguente:

ResourceGroupName                  Location       ProvisioningState Tags TagsTable ResourceId
-----------------                  --------       ----------------- ---- --------- ----------
cloud-shell-storage-southcentralus southcentralus Succeeded                        /subscriptions/00000000-0000-0000...
ExerciseResources                  eastus         Succeeded                        /subscriptions/00000000-0000-0000...

Creare un gruppo di risorse

Come è noto, le risorse create in Azure vengono sempre inserite in un gruppo di risorse ai fini della gestione. La creazione di un gruppo di risorse è spesso una delle prime attività che si eseguono quando si avvia una nuova applicazione.

È possibile creare i gruppi di risorse usando il cmdlet New-AzResourceGroup. È necessario specificare un nome e una posizione. Il nome deve essere univoco all'interno della sottoscrizione. La posizione determina dove vengono archiviati i metadati per il gruppo di risorse (questo aspetto può essere importante per motivi di conformità). Si usano stringhe come "Stati Uniti occidentali", "Europa settentrionale" o "India occidentale" per specificare la posizione. Come la maggior parte dei cmdlet di Azure, New-AzResourceGroup presenta numerosi parametri facoltativi, ma la sintassi di base è la seguente:

New-AzResourceGroup -Name <name> -Location <location>

Nota

Tenere presente che si lavorerà nella sandbox attiva di Azure che crea automaticamente il gruppo di risorse. Usare il comando precedente se si preferisce lavorare nella propria sottoscrizione.

Verificare le risorse

Get-AzResource elenca le risorse di Azure, utili qui per verificare che la creazione delle risorse e del gruppo di risorse è stata eseguita correttamente.

Get-AzResource

Come per il comando Get-AzResourceGroup, è possibile ottenere una visualizzazione più concisa tramite il cmdlet Format-Table:

Get-AzResource | Format-Table

È anche possibile filtrare per gruppi di risorse specifiche, in modo da elencare solo le risorse associate a tali gruppi:

Get-AzResource -ResourceGroupName ExerciseResources

Creare una macchina virtuale di Azure

Un'altra attività comune che è possibile eseguire con PowerShell è la creazione di macchine virtuali.

Azure PowerShell include il cmdlet New-AzVm per creare una macchina virtuale. Il cmdlet ha diversi parametri che consentono di gestire le numerose impostazioni di configurazione della macchina virtuale. La maggior parte dei parametri ha valori predefiniti accettabili, quindi è necessario specificare solo cinque elementi:

  • ResourceGroupName: il gruppo di risorse in cui viene inserita la nuova macchina virtuale.
  • Name: il nome della macchina virtuale in Azure.
  • Location: la posizione geografica in cui viene eseguito il provisioning della macchina virtuale.
  • Credenziale: un oggetto contenente il nome utente e la password per l'account di amministratore della macchina virtuale. Viene usato il cmdlet Get-Credential. Questo cmdlet richiede nome utente e password e assembla queste informazioni in un oggetto credenziale.
  • Immagine: l'immagine del sistema operativo da usare per la macchina virtuale, che in genere è una distribuzione Linux o Windows Server.
   New-AzVm
       -ResourceGroupName <resource group name>
       -Name <machine name>
       -Credential <credentials object>
       -Location <location>
       -Image <image name>

È possibile fornire questi parametri direttamente al cmdlet, come mostrato nell'esempio precedente. In alternativa, si possono usare altri cmdlet per configurare la macchina virtuale, ad esempio Set-AzVMOperatingSystem, Set-AzVMSourceImage, Add-AzVMNetworkInterface e Set-AzVMOSDisk.

Di seguito è riportato un esempio in cui il cmdlet Get-Credential viene collegato con il parametro -Credential:

New-AzVM -Name MyVm -ResourceGroupName ExerciseResources -Credential (Get-Credential) ...

Il suffisso AzVM è specifico dei comandi basati su macchina virtuale in PowerShell. Sono disponibili moli altri comandi:

Comando Descrizione
Remove-AzVM Elimina una macchina virtuale di Azure
Start-AzVM Avvia una macchina virtuale arrestata
Stop-AzVM Arresta una macchina virtuale in esecuzione
Restart-AzVM Consente di riavviare una macchina virtuale
Update-AzVM Aggiorna la configurazione per una macchina virtuale

Esempio: recupero delle informazioni per una macchina virtuale

È possibile elencare le macchine virtuali nella sottoscrizione usando il comando Get-AzVM -Status. Questo comando supporta anche l'immissione di una macchina virtuale specifica includendo la proprietà -Name. In questo caso, la proprietà viene assegnata a una variabile di PowerShell:

$vm = Get-AzVM  -Name MyVM -ResourceGroupName ExerciseResources

La cosa interessante è che ora la macchina virtuale è un oggetto con cui è possibile interagire. Ad esempio, si possono apportare modifiche a questo oggetto, quindi annullarle in Azure con il comando Update-AzVM:

$ResourceGroupName = "ExerciseResources"
$vm = Get-AzVM  -Name MyVM -ResourceGroupName $ResourceGroupName
$vm.HardwareProfile.vmSize = "Standard_DS3_v2"

Update-AzVM -ResourceGroupName $ResourceGroupName  -VM $vm

La modalità interattiva di PowerShell è appropriata per le attività occasionali. In questo esempio, viene usato lo stesso gruppo di risorse per tutta la durata del progetto, pertanto è ragionevole crearlo in modalità interattiva. La modalità interattiva è spesso più veloce e semplice per questa attività rispetto alla scrittura di uno script e alla sua esecuzione una sola volta.