Eseguire script nella macchina virtuale Windows usando l'azione Esegui comando

La funzionalità Esegui comando usa l'agente macchina virtuale per eseguire gli script PowerShell in una macchina virtuale Windows di Azure. Questi script possono essere usati per la gestione generale del computer o delle applicazioni. Consentono di diagnosticare e risolvere rapidamente i problemi di accesso e di rete della macchina virtuale e di riportarla a uno stato valido.

Vantaggi

È possibile accedere alle macchine virtuali in diversi modi. La funzionalità Esegui comando può eseguire script nelle macchine virtuali in modalità remota, tramite l'agente per la macchina virtuale. La funzionalità Esegui comando può essere usata tramite il portale di Azure, l'API REST o PowerShell per le macchine virtuali Windows.

Questa funzionalità è utile in tutti gli scenari in cui si vuole eseguire uno script all'interno di una macchina virtuale. È uno dei pochi modi per risolvere e correggere i problemi in una macchina virtuale che non ha la porta RDP o SSH aperta a causa di una configurazione non corretta della rete o dell'utente amministratore.

Prerequisiti

Sistema operativo Windows supportato

Sistema operativo Windows x64
Windows 10 Supportato
Windows 11 Supportato
Windows Server 2008 SP2 Supportato
Windows Server 2008 R2 Supportato
Windows Server 2012 Supportato
Windows Server 2012 R2 Supportato
Windows Server 2016 Supportato
Windows Server 2016 Core Supportato
Windows Server 2019 Supportato
Windows Server 2019 Core Supportato
Windows Server 2022 Supportato
Windows Server 2022 Core Supportato

Restrizioni

Quando si usa Esegui comando, sono valide le limitazioni seguenti:

  • L'output è limitato agli ultimi 4096 byte.
  • Il tempo minimo per eseguire uno script è di circa 20 secondi.
  • Gli script vengono eseguiti come script di sistema in Windows.
  • È possibile eseguire uno script alla volta.
  • Gli script che richiedono informazioni (modalità interattiva) non sono supportati.
  • Non è possibile annullare l'esecuzione di uno script.
  • Il tempo massimo di esecuzione di uno script è di 90 minuti. Dopo questo tempo viene raggiunto il timeout.
  • La connettività in uscita dalla macchina virtuale è necessaria per restituire i risultati dello script.
  • Non è consigliabile eseguire uno script che causerà un arresto o un aggiornamento dell'agente di macchine virtuali. Può infatti lasciare l'estensione in uno stato di transizione, causando un timeout.

Nota

Per funzionare correttamente, Esegui comando richiede la connettività agli indirizzi IP pubblici di Azure (porta 443). Se l'estensione non ha accesso a questi endpoint, gli script potrebbero funzionare correttamente, ma non restituiranno risultati. Se si sta bloccando il traffico nella macchina virtuale, è possibile usare i tag di servizio per consentire il traffico verso gli indirizzi IP pubblici di Azure tramite il tag AzureCloud.

La funzionalità Esegui comando non funziona se lo stato dell'agente della macchina virtuale non è PRONTO. Controllare lo stato dell'agente nelle proprietà della macchina virtuale nel portale di Azure.

Comandi disponibili

Questa tabella mostra l'elenco di comandi disponibili per le macchine virtuali Windows. Si può usare il comando RunPowerShellScript per eseguire qualsiasi script personalizzato desiderato. Quando si usa l'interfaccia della riga di comando di Azure o PowerShell per eseguire un comando, il valore specificato per il parametro --command-id o -CommandId deve essere uno dei valori elencati di seguito. Quando si specifica un valore che non è un comando disponibile, viene visualizzato questo errore:

The entity was not found in this Azure location

Nome Descrizione
RunPowerShellScript Esegue uno script di PowerShell
DisableNLA Disabilitare l'autenticazione a livello di rete
DisableWindowsUpdate Disabilitare Windows Update Aggiornamenti automatico
EnableAdminAccount Controlla se l'account Administrator locale è disabilitato, e in tal caso lo abilita.
EnableEMS Abilitare EMS
EnableRemotePS Configura il computer per abilitare PowerShell remoto.
EnableWindowsUpdate Abilitare Windows Update Aggiornamenti automatico
IPConfig Visualizza informazioni dettagliate relative a indirizzo IP, subnet mask e gateway predefinito per ogni scheda associata a TCP/IP.
RDPSettings Controlla le impostazioni del Registro e le impostazioni dei criteri di dominio. Suggerisce le azioni dei criteri se il computer fa parte di un dominio o converte le impostazioni nei valori predefiniti.
ResetRDPCert Rimuove il certificato TLS/SSL associato al listener del protocollo RDP e ripristina la sicurezza del listener RDP sull'impostazione predefinita. Usare questo script se vengono visualizzati eventuali problemi con il certificato.
SetRDPPort Imposta il numero di porta predefinito o specificato dall'utente per le connessioni Desktop remoto. Abilita regole del firewall per l'accesso in entrata alla porta.

Interfaccia della riga di comando di Azure

L'esempio seguente usa il comando az vm run-command per eseguire uno script della shell su una macchina virtuale Windows di Azure.

# script.ps1
#   param(
#       [string]$arg1,
#       [string]$arg2
#   )
#   Write-Host This is a sample script with parameters $arg1 and $arg2

az vm run-command invoke  --command-id RunPowerShellScript --name win-vm -g my-resource-group \
    --scripts @script.ps1 --parameters "arg1=somefoo" "arg2=somebar"

Portale di Azure

Passare a una macchina virtuale nel portale di Azure e selezionare Esegui comando dal menu a sinistra, in Operazioni. Viene visualizzato un elenco dei comandi disponibili per l'esecuzione nella macchina virtuale.

Elenco di comandi

Seleziona un comando da eseguire Alcuni comandi potrebbero avere parametri di input obbligatori o facoltativi. Per questi comandi, i parametri vengono presentati come campi di testo in cui immettere i valori di input. Per ogni comando è possibile visualizzare lo script che viene eseguito espandendo Visualizza script. RunPowerShellScript è diverso dagli altri comandi, in quanto consente di specificare script personalizzati.

Nota

I comandi incorporati non sono modificabili.

Dopo aver scelto il comando, selezionare Esegui per eseguire lo script. Lo script viene eseguito e, al termine, restituisce l'output e gli eventuali errori nella finestra di output. Lo screenshot seguente illustra un esempio di output dall'esecuzione del comando RDPSettings.

Eseguire l'output dello script di comando

PowerShell

L'esempio seguente usa il cmdlet Invoke-AzVMRunCommand per eseguire uno script di PowerShell in una macchina virtuale di Azure. Il cmdlet si aspetta che lo script a cui fa riferimento il parametro -ScriptPath sia presente nella posizione in cui il cmdlet viene eseguito.

Invoke-AzVMRunCommand -ResourceGroupName '<myResourceGroup>' -Name '<myVMName>' -CommandId 'RunPowerShellScript' -ScriptPath '<pathToScript>' -Parameter @{"arg1" = "var1";"arg2" = "var2"}

Nota

I valori dei parametri possono essere di tipo stringa solo e lo script è responsabile della conversione in altri tipi, se necessario.

Limitare l'accesso a Esegui comando

Elencare i comandi di esecuzione o visualizzare i dettagli di un comando richiede l'autorizzazione Microsoft.Compute/locations/runCommands/read a livello di sottoscrizione. Il ruolo predefinito Lettore e i livelli superiori hanno questa autorizzazione.

L'esecuzione di un comando richiede l'autorizzazione Microsoft.Compute/virtualMachines/runCommands/write. Il ruolo Collaboratore Macchina virtuale e i livelli superiori hanno questa autorizzazione.

È possibile usare uno dei ruoli predefiniti o creare un ruolo personalizzato per usare Esegui comando.

Risoluzione dei problemi di Windows per l'esecuzione di azioni

Quando si esegue il comando di azione per gli ambienti Windows, fare riferimento al file di log RunCommandExtension in genere disponibile nella directory seguente: C:\WindowsAzure\Logs\Plugins\Microsoft.CPlat.Core.RunCommandWindows\<version>\RunCommandExtension.log per ulteriori dettagli.

Problemi noti

L'estensione del comando Di esecuzione azione potrebbe non riuscire a essere eseguita nell'ambiente Windows se il comando contiene caratteri riservati. Ad esempio:

Se il & simbolo viene passato nel parametro del comando, ad esempio lo script di PowerShell seguente, potrebbe non riuscire.

$paramm='abc&jj'
Invoke-AzVMRunCommand -ResourceGroupName AzureCloudService1 -Name test -CommandId 'RunPowerShellScript' -ScriptPath C:\data\228332902\PostAppConfig.ps1 -Parameter @{"Prefix" = $paramm}

Usare il ^ carattere per eseguire l'escape nell'argomento & , ad esempio $paramm='abc^&jj'

L'estensione Esegui comando potrebbe anche non riuscire a eseguire se il comando da eseguire contiene "\n" nel percorso, come verrà considerato come una nuova riga. Ad esempio, C:\Windows\notepad.exe contiene l'oggetto \n nel percorso del file. Prendere in considerazione la sostituzione \n con \N nel percorso.

Rimozione dei comandi per l'esecuzione di azioni

Se è necessario rimuovere l'estensione windows del comando di esecuzione dell'azione, vedere la procedura seguente per Azure PowerShell e l'interfaccia della riga di comando:

Sostituire rgname e vmname con il nome del gruppo di risorse e il nome della macchina virtuale pertinenti negli esempi di rimozione seguenti.

 Invoke-AzVMRunCommand -ResourceGroupName 'rgname' -VMName 'vmname' -CommandId 'RemoveRunCommandWindowsExtension'
az vm run-command invoke  --command-id RemoveRunCommandWindowsExtension --name vmname -g rgname

Nota

Quando si applica di nuovo un comando Run, l'estensione verrà installata automaticamente. È possibile usare il comando di rimozione dell'estensione per risolvere eventuali problemi correlati all'estensione.

Passaggi successivi

Per informazioni su altri modi per eseguire comandi e script in remoto nella macchina virtuale, vedere Eseguire gli script nella macchina virtuale Windows.