Condividi tramite


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

Sistemi operativi Windows supportati

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

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.
  • È consigliabile non eseguire uno script che causa l'arresto o l'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 di macchine virtuali è 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 Disabilita l'autenticazione a livello di rete
DisableWindowsUpdate Disabilita gli aggiornamenti automatici con Windows Update
EnableAdminAccount Controlla se l'account Administrator locale è disabilitato, e in tal caso lo abilita.
EnableEMS Abilita EMS
EnableRemotePS Configura il computer per abilitare PowerShell remoto.
EnableWindowsUpdate Abilita gli aggiornamenti automatici con Windows Update
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 in Operazioni. Viene visualizzato un elenco dei comandi disponibili per l'esecuzione nella macchina virtuale.

Elenco dei 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 vedere 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 solo di tipo stringa e lo script è responsabile della conversione in altri tipi, se necessario.

Limitare l'accesso a Esegui comando

Per elencare le opzioni per l'esecuzione dei comandi o visualizzare i dettagli di un comando è necessaria 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/action. 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 dell'azione Esegui comando per Windows

Quando si risolvono i problemi dell'azione Esegui comando per ambienti Windows, per ottenere dettagli aggiuntivi fare riferimento al file di log RunCommandExtension che si trova in genere nella directory seguente C:\WindowsAzure\Logs\Plugins\Microsoft.CPlat.Core.RunCommandWindows\<version>\RunCommandExtension.log.

Problemi noti

  • È possibile che l'esecuzione dell'estensione Azione Esegui abbia esito negativo 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, è possibile che si verifichi un errore.

    $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 di & nell'argomento, ad esempio $paramm='abc^&jj'

  • È anche possibile che l'esecuzione dell'estensione Esegui comando non riesca se il comando da eseguire contiene "\n" nel percorso, perché verrà considerato come una nuova riga. Ad esempio, C:\Windows\notepad.exe contiene \n nel percorso del file. Prendere in considerazione la sostituzione di \n con \N nel percorso.

  • Assicurarsi di non avere alcuna impostazione personalizzata nella chiave del Registro di sistema HKLM\SOFTWARE\Microsoft\Command Processor\AutoRun (illustrata in modo dettagliato qui). Questo problema potrebbe essere generato durante le fasi di installazione o abilitazione dell'estensione RunCommand e causare un errore come 'XYZ non è riconosciuto come comando interno o esterno, programma eseguibile o file batch'.

Rimozione dell'azione Esegui comando

Se è necessario rimuovere l'estensione di Windows relativa all'azione Esegui comando, vedere i passaggi seguenti 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 Esegui comando, l'estensione verrà installata automaticamente. È possibile usare il comando di rimozione dell'estensione per risolvere eventuali problemi relativi 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.