Condividi tramite


Esercitazione: Creare un runbook del flusso di lavoro PowerShell in Automazione

Questa esercitazione illustra la creazione di un runbook del flusso di lavoro PowerShell in Automazione di Azure. I runbook del flusso di lavoro PowerShell sono runbook di testo basati sul flusso di lavoro Windows PowerShell. È possibile creare e modificare direttamente il codice del runbook usando l'editor di testo nel portale di Azure.

Nota

Questo articolo è applicabile solo per PowerShell 5.1. Le versioni di PowerShell 7+ non supportano i flussi di lavoro e non è possibile aggiornare i runbook obsoleti. È consigliabile usare runbook testuali di PowerShell 7.2 per funzionalità avanzate, ad esempio l'esecuzione parallela del processo. Altre informazioni sulle limitazioni dei runbook del flusso di lavoro PowerShell.

In questa esercitazione apprenderai a:

  • Creare un runbook del flusso di lavoro PowerShell
  • Testare e pubblicare il runbook
  • Eseguire il processo del runbook e monitorarne lo stato
  • Aggiungere l'autenticazione per gestire le risorse di Azure
  • Aggiornare i parametri del runbook per avviare una macchina virtuale di Azure

Se non si ha una sottoscrizione di Azure, creare un account gratuito prima di iniziare.

Prerequisiti

Assegnare le autorizzazioni alle identità gestite

Assegnare le autorizzazioni all'identità gestita appropriata per consentire l'arresto di una macchina virtuale. Il runbook può usare l'identità gestita assegnata dal sistema dell'account di Automazione o un'identità gestita assegnata dall'utente. Vengono forniti passaggi per assegnare le autorizzazioni a ogni identità. Nella procedura seguente si usa il portale di Azure. Se si preferisce usare PowerShell, vedere Assegnare ruoli di Azure con Azure PowerShell.

  1. Accedere al portale di Azure e passare all'account di Automazione.

  2. In Impostazioni account selezionare Identità (anteprima).

  3. Nella scheda Assegnato dal sistema, in Autorizzazioni selezionare Assegnazioni di ruolo di Azure per aprire la pagina Assegnazioni di ruolo di Azure.

    Selezione delle assegnazioni di ruolo di Azure nel portale.

  4. Selezionare + Aggiungi assegnazione di ruolo (anteprima) per aprire la pagina Aggiungi assegnazione di ruolo (anteprima).

    Aggiungere assegnazioni di ruolo nel portale.

  5. Selezionare i valori appropriati.

    Proprietà Description
    Scope L'ambito è un set di risorse a cui si applica l'assegnazione di ruolo. Nell'elenco a discesa selezionare Gruppo di risorse.
    Subscription Questo campo deve essere popolato automaticamente con la sottoscrizione.
    Gruppo di risorse Nell'elenco a discesa selezionare il gruppo di risorse per concedere le autorizzazioni di identità.
    Ruolo Nell'elenco a discesa selezionare Utente di DevTest Labs.
  6. Selezionare Salva e quindi chiudere la pagina Assegnazioni di ruolo di Azure per tornare alla scheda Assegnato dal sistema.

  7. Selezionare la scheda Assegnato dall'utente.

  8. Selezionare l'identità gestita assegnata dall'utente dall'elenco per aprire la pagina Identità gestita.

    Selezione dell'identità gestita assegnata dall'utente nel portale.

  9. Annotare l'ID client per gli usi successivi.

    Visualizzazione dell'ID client per l'identità gestita nel portale

  10. Nel menu a sinistra selezionare Assegnazioni di ruolo di Azure e quindi + Aggiungi assegnazione di ruolo (anteprima) per aprire la pagina Aggiungi assegnazione di ruolo (anteprima).

    Aggiungere assegnazioni di ruolo nel portale per l'identità assegnata dall'utente.

  11. Selezionare i valori appropriati.

    Proprietà Description
    Scope Nell'elenco a discesa selezionare Gruppo di risorse.
    Subscription Questo campo deve essere popolato automaticamente con la sottoscrizione.
    Gruppo di risorse Nell'elenco a discesa selezionare il gruppo di risorse per concedere le autorizzazioni di identità.
    Ruolo Nell'elenco a discesa selezionare Utente di DevTest Labs.
  12. Selezionare Salva e quindi chiudere la pagina Assegnazioni di ruolo di Azure per tornare alla scheda Assegnata dall'utente.

Creare un nuovo runbook

Per iniziare, creare un semplice runbook del flusso di lavoro PowerShell. Uno dei vantaggi offerti dai flussi di lavoro di Windows PowerShell consiste nella possibilità di eseguire un set di comandi in parallelo anziché in sequenza, come accade invece con uno script tipico.

Nota

Con la creazione del runbook di rilascio è disponibile una nuova esperienza nel portale di Azure. Quando si seleziona pannello Runbook >Crea un runbook, viene visualizzata una nuova pagina Crea un runbook con le opzioni applicabili.

  1. Nella pagina apri account di Automazione, in Automazione processi, selezionare Runbook

    Creare un runbook del flusso di lavoro di PowerShell dal portale

  2. Selezionare +Crea un runbook.

    1. Denominare il runbook. Ad esempio, testare.
    2. Dal menu a discesa tipo di runbook, selezionare flusso di lavoro PowerShell.
    3. Nell'elenco a discesa Versione di runtime, selezionare 5.1.
    4. Immettere Descrizione applicabile.
    5. Seleziona Crea.

    Opzioni del runbook del flusso di lavoro PowerShell dal portale

Aggiungere un codice al runbook

È possibile digitare il codice direttamente nel runbook oppure è possibile selezionare i cmdlet, i runbook e le risorse dal controllo Libreria e aggiungerli al runbook con tutti i parametri correlati. Per questa esercitazione si digiterà il codice direttamente nel runbook.

Il runbook è attualmente vuoto e contiene solo la parola chiave workflow obbligatoria, il nome del runbook e le parentesi graffe che racchiuderanno l'intero flusso di lavoro.

workflow MyFirstRunbook-Workflow
{
}
  1. È possibile utilizzare la parola chiave Parallel per creare un blocco di script con comandi multipli eseguiti in contemporanea. Immettere il codice seguente tra parentesi graffe:

     parallel
     {
     	Write-Output "Parallel"
     	Get-Date
     	Start-Sleep -Seconds 3
     	Get-Date
     }
    
     Write-Output " `r`n"
     Write-Output "Non-Parallel"
     Get-Date
     Start-Sleep -Seconds 3
     Get-Date
    
  2. Salvare il runbook facendo clic su Salva.

Testare il runbook

Prima di pubblicare il runbook per renderlo disponibile nell'ambiente di produzione, occorre testarlo per verificare che funzioni correttamente. Quando si testa un runbook, è necessario eseguire la versione Bozza e visualizzarne l'output in modo interattivo.

  1. Fare clic su Riquadro di test per aprire la pagina Test.

  2. Selezionare Avvia per avviare il test. Viene creato un processo del runbook e il relativo stato viene visualizzato nel riquadro.

    Lo stato iniziale del processo è In coda, per indicare che è in attesa della disponibilità di un ruolo di lavoro per runbook nel cloud. Lo stato passa ad Avvio quando un ruolo di lavoro richiede il processo. Infine, lo stato diventa In esecuzione quando viene avviata l'esecuzione effettiva del runbook.

  3. Al termine del processo del runbook, viene visualizzato l'output nella pagina di test. L'output dovrebbe essere simile all'immagine seguente:

    Output parallelo del runbook del flusso di lavoro PowerShell

    Esaminare l'output. Tutti gli elementi nel blocco Parallel, incluso il comando Start-Sleep, vengono eseguiti contemporaneamente. Gli stessi comandi all'esterno del blocco Parallel vengono eseguiti in sequenza, come illustrato dai diversi timestamp di data.

  4. Chiudere la pagina Test per tornare al pannello Canvas.

Pubblicare e avviare il runbook

Il runbook creato è ancora in modalità bozza. È necessario pubblicarlo prima di poterlo eseguire in produzione. Quando si pubblica un runbook, è possibile sovrascrivere la versione pubblicata esistente con la versione bozza. In questo caso, non esiste ancora una versione pubblicata perché il runbook è appena stato creato.

  1. Selezionare Pubblica per pubblicare il runbook, quindi quando richiesto.

  2. Il campo Stato ora mostra Pubblicato. Esaminare le opzioni nella parte superiore che consentono di avviare il runbook adesso, pianificarlo per un'ora di inizo in futuro o creare un webhook per poterlo avviare con una chiamata HTTP. Selezionare Avvia e poi quando richiesto per avviare il runbook.

    Pagina di panoramica del runbook del flusso di lavoro powerShell

  3. Viene visualizzata una pagina Processo per il processo del runbook creato. In questo caso, lasciare aperta la pagina per poter controllare lo stato del processo. Il campo Stato corrisponde agli stati visualizzati durante il test del runbook.

    Screenshot della pagina processo del runbook.

  4. Quando lo stato del runbook risulta Completato, selezionare Output. L'output dovrebbe essere simile all'output del test.

  5. Chiudere la pagina Processo per tornare alla pagina Panoramica del runbook.

  6. In Risorse, selezionare Processi. In questa pagina sono elencati tutti i processi creati dal runbook. Dovrebbe essere elencato un solo processo, perché il processo è stato eseguito una sola volta.

  7. Selezionare il processo per aprire la stessa pagina Processo visualizzata quando è stato avviato il runbook. Utilizzare questa pagina per visualizzare i dettagli di qualsiasi processo creato per il runbook. Chiudere la pagina Processo per tornare alla pagina Panoramica del runbook.

Aggiungere l'autenticazione per gestire le risorse di Azure

Il runbook è stato testato e pubblicato, ma finora non esegue alcuna attività utile. Si vuole fare in modo che gestisca le risorse di Azure. Ma potrà procedere solo eseguendo l'autenticazione con le credenziali per la sottoscrizione. Il runbook usa l'identità gestita assegnata dal sistema dell'account di Automazione per eseguire l'autenticazione con Azure per eseguire l'azione di gestione sulla macchina virtuale. Il runbook può essere facilmente modificato per usare un'identità gestita assegnata dall'utente.

  1. Selezionare Panoramica e quindi Modifica per aprire l'editor di testo.

  2. Sostituire il codice esistente con quello seguente:

    workflow MyFirstRunbook-Workflow
    {
     $resourceGroup = "resourceGroupName"
    
     # Ensures you do not inherit an AzContext in your runbook
     Disable-AzContextAutosave -Scope Process
    
     # Connect to Azure with system-assigned managed identity
     Connect-AzAccount -Identity
    
     # set and store context
     $AzureContext = Set-AzContext -SubscriptionId "<SubscriptionID>"
    }
    

    Modificare la variabile $resourceGroup con un valore valido che rappresenta il gruppo di risorse.

  3. Se si vuole che il runbook venga eseguito con l'identità gestita assegnata dal sistema, lasciare invariato il codice. Se si preferisce usare un'identità gestita assegnata dall'utente, procedere come illustrato di seguito:

    1. Dalla riga 9 rimuovere Connect-AzAccount -Identity,
    2. Sostituirlo con Connect-AzAccount -Identity -AccountId <ClientId> e
    3. Immettere l'ID client ottenuto in precedenza.
  4. Selezionare Salva e quindi Riquadro di test.

  5. Selezionare Avvia per avviare il test. Al termine verrà visualizzato un output simile al seguente, con le informazioni di base dell'account. Questa azione conferma che le credenziali sono valide.

    Informazioni di base che confermano le credenziali.

  6. Chiudere la pagina Test per tornare al pannello Canvas.

Aggiungere il codice per avviare una macchina virtuale

Ora che il runbook esegue l'autenticazione per la sottoscrizione di Azure è possibile gestire le risorse. Aggiungere un comando per avviare una macchina virtuale. È possibile selezionare una macchina virtuale qualsiasi nella sottoscrizione di Azure. Per ora il nome sarà hardcoded nel runbook.

  1. Aggiungere il codice seguente come ultima riga immediatamente prima della parentesi graffa di chiusura. Sostituire VMName con il nome effettivo di una macchina virtuale.

    Start-AzVM -Name "VMName" -ResourceGroupName $resourceGroup -DefaultProfile $AzureContext
    
  2. Testare il runbook e verificare che la macchina virtuale sia stata avviata. Tornare quindi all'area di disegno.

Aggiungere parametri di input al runbook

Il runbook avvia effettivamente la macchina virtuale hardcoded nel runbook. Sarà più utile se è possibile specificare la macchina virtuale all'avvio del runbook. Per fornire questa funzionalità, si aggiungeranno dei parametri di input al runbook.

  1. Sostituire la riga 3, $resourceGroup = "resourceGroupName", con quanto segue:

    Param(
        [string]$resourceGroup,
        [string]$VMName
    )
    
  2. Sostituire il comando Start-AzVM precedente con quanto segue:

    Start-AzVM -Name $VMName -ResourceGroupName $resourceGroup -DefaultProfile $AzureContext
    
  3. Testare il runbook e verificare che la macchina virtuale sia stata avviata. Tornare quindi all'area di disegno.

Gestire più macchine virtuali contemporaneamente

È possibile usare il costrutto ForEach -Parallel per elaborare i comandi per ogni elemento di una raccolta simultaneamente. Rivedere il codice in modo che il runbook ora:

  • Accettare una raccolta di nomi di macchine virtuali,
  • Accettare un parametro per arrestare o avviare le macchine virtuali e
  • Eseguire le azioni in parallelo su tutte le macchine virtuali
  1. Sostituire tutto il codice esistente con il codice seguente:

    workflow MyFirstRunbook-Workflow
    {
    	param
    	(
    		[string]$resourceGroup,
    		[string[]]$VMs,
    		[string]$action
    	)
    
    	# Ensures you do not inherit an AzContext in your runbook
    	Disable-AzContextAutosave -Scope Process
    
    	# Connect to Azure with system-assigned managed identity
    	Connect-AzAccount -Identity
    
    	# set and store context
    	$AzureContext = Set-AzContext -SubscriptionId "<SubscriptionID>"
    
    	# Start or stop VMs in parallel
    	if ($action -eq "Start")
    	{
    		ForEach -Parallel ($vm in $VMs)
    		{
    			Start-AzVM -Name $vm -ResourceGroupName $resourceGroup -DefaultProfile $AzureContext
    		}
    	}
    	elseif ($action -eq "Stop")
    	{
    		ForEach -Parallel ($vm in $VMs)
    		{
    			Stop-AzVM -Name $vm -ResourceGroupName $resourceGroup -DefaultProfile $AzureContext -Force
    		}
    	}
    	else
    	{
    		Write-Output "`r`n Action not allowed. Please enter 'stop' or 'start'."
    	}
    }
    
  2. Se si vuole che il runbook venga eseguito con l'identità gestita assegnata dal sistema, lasciare invariato il codice. Se si preferisce usare un'identità gestita assegnata dall'utente, procedere come illustrato di seguito:

    1. Dalla riga 9 rimuovere Connect-AzAccount -Identity,
    2. Sostituirlo con Connect-AzAccount -Identity -AccountId <ClientId> e
    3. Immettere l'ID client ottenuto in precedenza.
  3. Selezionare Salva, quindi Pubblica, quindi quando richiesto.

  4. Nella pagina Panoramica selezionare Avvia.

  5. Popolare i parametri e quindi selezionare OK.

    Parametro Descrizione
    RESOURCEGROUP Immettere il nome del gruppo di risorse delle macchine virtuali.
    Macchine virtuali Immettere i nomi delle macchine virtuali usando la sintassi seguente: ["VM1","VM2","VM3"]
    Azione Immettere stop o start.
  6. Passare all'elenco di macchine virtuali e aggiornare la pagina ogni pochi secondi. Osservare che l'azione per ogni macchina virtuale avviene in parallelo. Senza la parola chiave -Parallel, le azioni sarebbero state eseguite in sequenza. Mentre le macchine virtuali verranno avviate in parallelo, ciascuna macchina virtuale può raggiungere la fase In esecuzione in momenti leggermente diversi, in base alle sue caratteristiche.

Pulire le risorse

Se non si intende continuare a usare questo runbook, eliminarlo con la procedura seguente:

  1. Passare all'account di Automazione.
  2. In Automazione processi selezionare Runbook.
  3. Selezionare il Runbook.
  4. Nella pagina Panoramica del runbook, selezionare Elimina.

Passaggi successivi

In questa esercitazione è stato creato un runbook del flusso di lavoro di PowerShell. Per un'analisi dei runbook Python 3, vedere: