Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Si applica a: ✔️ macchine virtuali di Linux ✔️ set di scalabilità flessibili
Importante
Il Comando di esecuzione gestita è attualmente disponibile nell'interfaccia della riga di comando di Azure, in PowerShell e nell'API. La funzionalità del portale è nella roadmap.
La funzionalità Esegui comando usa l'agente di VM per eseguire gli script all'interno di una VM Linux 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 VM e di riportarla a uno stato valido.
La versione gestita aggiornata di Esegui comando usa lo stesso canale dell'agente di macchine virtuali per eseguire script e offre i miglioramenti seguenti rispetto all'azione originale orientata di Esegui comando:
- Supporto per l'aggiornamento di Esegui comando attraverso il modello di distribuzione di ARM
- Esecuzione parallela di più script
- Esecuzione sequenziale degli script
- Timeout dello script specificato dall'utente
- Supporto per script a esecuzione prolungata (ore/giorni)
- Passaggio di segreti (parametri, password) in modo sicuro
Prerequisiti
Importante
L'agente guest Linux minimo supportato è la versione 2.4.0.2 Le versioni precedenti non supportano Managed RunCommand
Distribuzioni di Linux supportate
Distribuzione Linux | x64 | ARM64 |
---|---|---|
Alma Linux | 9.x+ | Non supportato |
Debian | 10+ | Non supportato |
Flatcar Linux | 3374.2.x+ | Non supportato |
Azure Linux | 2.x | Non supportato |
openSUSE | 12.3+ | Non supportato |
Oracle Linux | 6.4+, 7.x+, 8.x+ | Non supportato |
Red Hat Enterprise Linux | 6.7+, 7.x+, 8.x+ | Non supportato |
Rocky Linux | 9.x+ | Non supportato |
SLES | 12.x+, 15.x+ | Non supportato |
Ubuntu | 18.04+, 20.04+, 22.04+ | Non supportato |
Comandi disponibili
CommandID | Descrizione |
---|---|
ifconfig | Visualizza la configurazione di tutte le interfacce di rete. Per l'utilizzo, vedere Eseguire script |
Nota
Gli ID dei comandi precedenti sono applicabili ai comandi di esecuzione gestita per le macchine virtuali Linux. È possibile elencare tutti i commandId usando il comando "Get-AzVMRunCommandDocument -Location {RegionName}
".
Limitare l'accesso a Esegui comando
Per elencare i comandi di esecuzione 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/runCommand/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.
Interfaccia della riga di comando di Azure
Gli esempi seguenti usano az vm run-command per eseguire lo script della shell in una VM Linux di Azure.
Eseguire uno script con la VM
Questo comando recapita lo script alla macchina virtuale, lo esegue e restituisce l'output acquisito.
az vm run-command create --name "myRunCommand" --vm-name "myVM" --resource-group "myRG" --script "echo Hello World!"
Elencare tutte le risorse RunCommand distribuite in una VM
Questo comando restituisce un elenco completo di Esegui comando distribuiti in precedenza con le relative proprietà.
az vm run-command list --vm-name "myVM" --resource-group "myRG"
Ottenere lo stato e i risultati dell'esecuzione
Questo comando recupera lo stato dell'esecuzione corrente, inclusi l'output più recente, l'ora di inizio/fine, il codice di uscita e lo stato terminale dell'esecuzione.
az vm run-command show --name "myRunCommand" --vm-name "myVM" --resource-group "myRG" --expand instanceView
Nota
I campi di output e di errore in instanceView
sono limitati agli ultimi 4 KB.
Se si desidera accedere all'output completo e all'errore, è possibile inoltrare i dati di output e di errore ai BLOB di accodamento di archiviazione usando i parametri -outputBlobUri
e -errorBlobUri
durante l'esecuzione di Esegui comando usando Set-AzVMRunCommand
o Set-AzVMssRunCommand
.
Eliminare la risorsa RunCommand dalla VM
Rimuovere la risorsa RunCommand distribuita in precedenza nella VM. Se l'esecuzione dello script è ancora in corso, l'esecuzione verrà terminata.
az vm run-command delete --name "myRunCommand" --vm-name "myVM" --resource-group "myRG"
PowerShell
Eseguire uno script con la VM
Questo comando recapita lo script alla macchina virtuale, lo esegue e restituisce l'output acquisito.
Set-AzVMRunCommand -ResourceGroupName "myRG" -VMName "myVM" -Location "EastUS" -RunCommandName "RunCommandName" –SourceScript "echo Hello World!"
Eseguire uno script nella VM usando il parametro SourceScriptUri
OutputBlobUri
e ErrorBlobUri
sono parametri facoltativi.
Set-AzVMRunCommand -ResourceGroupName -VMName -RunCommandName -SourceScriptUri “< SAS URI of a storage blob with read access or public URI>" -OutputBlobUri “< SAS URI of a storage append blob with read, add, create, write access>” -ErrorBlobUri “< SAS URI of a storage append blob with read, add, create, write access>”
Eseguire un comando a esecuzione prolungata in una macchina virtuale
Il tempo di esecuzione deve essere eseguito più a lungo del timeout predefinito di 90 minuti. Dovrebbe essere eseguito per 100 minuti (fare riferimento al parametro 6.000 secondi -TimeoutInSecond) a condizione che lo script sia previsto che venga eseguito così a lungo. Dopo 100 minuti, l'esecuzione dello script deve essere arrestata.
Set-AzVMRunCommand -ResourceGroupName MyRG -VMName MyVM -RunCommandName MyRunCommand -Location EastUS2EUAP -SourceScriptUri <SourceScriptUri> -AsyncExecution -TimeoutInSecond 6000
Elencare tutte le risorse RunCommand distribuite in una VM
Questo comando restituisce un elenco completo di Esegui comando distribuiti in precedenza con le relative proprietà.
Get-AzVMRunCommand -ResourceGroupName "myRG" -VMName "myVM"
Ottenere lo stato e i risultati dell'esecuzione
Questo comando recupera lo stato dell'esecuzione corrente, inclusi l'output più recente, l'ora di inizio/fine, il codice di uscita e lo stato terminale dell'esecuzione.
Get-AzVMRunCommand -ResourceGroupName "myRG" -VMName "myVM" -RunCommandName "RunCommandName" -Expand instanceView
Creare o aggiornare Esegui comando in una macchina virtuale usando SourceScriptUri (URL SAS del BLOB di archiviazione)
Creare o aggiornare Run Command su una VM Windows utilizzando un URL SAS (firma di accesso condiviso) di un blob di archiviazione che contiene uno script PowerShell.
SourceScriptUri
può essere un URL SAS completo di un BLOB di archiviazione o un URL pubblico.
Nota
L'URL SAS deve fornire l'accesso in lettura al BLOB. Viene suggerita una scadenza di 24 ore per l'URL SAS. Gli URL SAS possono essere generati nel portale di Azure utilizzando le opzioni del BLOB o il token SAS con New-AzStorageBlobSASToken
. Se si genera un token SAS usando New-AzStorageBlobSASToken
, l'URL SAS sarà pari a "URL del blob di base" + "?" + "token SAS da New-AzStorageBlobSASToken"
Set-AzVMRunCommand -ResourceGroupName MyRG0 -VMName MyVMEE -RunCommandName MyRunCommand -Location EastUS2EUAP -SourceScriptUri <SourceScriptURI>
Ottenere una visualizzazione dell'istanza di Esegui comando per una macchina virtuale dopo la creazione o l'aggiornamento di Esegui comando
Ottenere Esegui comando per la macchina virtuale con visualizzazione istanza. La visualizzazione dell'istanza contiene lo stato di esecuzione di Esegui comando (completato, con errori e così via), il codice di uscita, l'output standard e l'errore standard generato eseguendo lo script con Esegui comando. Un codice ExitCode diverso da zero indica un'esecuzione non riuscita.
$x = Get-AzVMRunCommand -ResourceGroupName MyRG -VMName MyVM -RunCommandName MyRunCommand -Expand InstanceView
$x.InstanceView
Output previsto:
ExecutionState : Succeeded
ExecutionMessage :
ExitCode : 0
Output :
output : uid=0(root) gid=0(root) groups=0(root)
HelloWorld
Error :
StartTime : 10/27/2022 9:10:52 PM
EndTime : 10/27/2022 9:10:55 PM
Statuses :
InstanceView.ExecutionState
: stato dello script Esegui comando dell'utente. Fare riferimento a questo stato per sapere se lo script ha avuto esito positivo o negativo.
ProvisioningState
: stato del provisioning dell'estensione generale end-to-end (se la piattaforma dell'estensione è riuscita ad attivare o meno lo script Esegui comando).
Creare o aggiornare Esegui comando in una macchina virtuale con SourceScript (testo script)
Creare o aggiornare Esegui comando in una VM passando il contenuto dello script direttamente al parametro -SourceScript. Usare ;
per separare più comandi.
Set-AzVMRunCommand -ResourceGroupName MyRG0 -VMName MyVML -RunCommandName MyRunCommand2 -Location EastUS2EUAP -SourceScript "id; echo HelloWorld"
Creare o aggiornare Esegui comando in una VM usando SourceCommandId
Creare o aggiornare Esegui comando in una macchina virtuale usando commandId
preesistente. È possibile recuperare i commandId usando Get-AzVMRunCommandDocument.
Set-AzVMRunCommand -ResourceGroupName MyRG0 -VMName MyVMEE -RunCommandName MyRunCommand -Location EastUS2EUAP -SourceCommandId ipconfig
Creare o aggiornare Esegui comando in una macchina virtuale con OutputBlobUri, ErrorBlobUri per trasmettere l'output standard e i messaggi di errore standard all'output e ai BLOB di accodamento dell'errore
Creare o aggiornare Esegui comando in una macchina virtuale e trasmettere l'output standard e i messaggi di errore standard all'output e al BLOB di accodamento dell'errore.
Set-AzVMRunCommand -ResourceGroupName MyRG0 -VMName MyVML -RunCommandName MyRunCommand3 -Location EastUS2EUAP EastUS2EUAP -SourceScriptUri <SourceScriptUri> -OutputBlobUri <OutputBlobUri> -ErrorBlobUri <errorbloburi>
Nota
I BLOB di output e di errore devono essere di tipo BLOB di tipo AppendBlob
e i loro URL SAS devono fornire l'accesso in lettura, accodamento, creazione e scrittura nel BLOB. Viene suggerita una scadenza di 24 ore per l'URL SAS. Se il BLOB di output o di errore non esiste, verrà creato un BLOB di tipo AppendBlob. Gli URL SAS possono essere generati nel portale di Azure utilizzando le opzioni per il blob o creando un token SAS tramite New-AzStorageBlobSASToken. Se si genera un token SAS usando New-AzStorageBlobSASToken
, l'URL SAS = URL BLOB di base + "?" + token SAS da New-AzStorageBlobSASToken
.
Creare o aggiornare il comando 'Esegui' su una VM ed eseguire il comando 'Esegui' come utente differente utilizzando i parametri RunAsUser e RunAsPassword.
Creare o aggiornare Esegui comando in una macchina virtuale, eseguire Esegui comando come utente differente usando i parametri RunAsUser
e RunAsPassword
. Affinché RunAs funzioni correttamente, contattare l'amministratore della macchina virtuale e assicurarsi che l'utente venga aggiunto nella macchina virtuale, l'utente abbia accesso alle risorse accessibili dal comando Esegui (directory, file, rete e così via) e, in caso di macchina virtuale Windows, il servizio "Accesso secondario" è in esecuzione nella macchina virtuale.
Set-AzVMRunCommand -ResourceGroupName MyRG0 -VMName MyVMEE -RunCommandName MyRunCommand -Location EastUS2EUAP EastUS2EUAP -SourceScriptUri <SourceScriptUri> -RunAsUser myusername -RunAsPassword mypassword
Creare o aggiornare Esegui comando in una risorsa set di scalabilità di macchine virtuali usando SourceScriptUri (URL SAS del BLOB di archiviazione).
Creare o aggiornare Il comando Esegui in una risorsa set di scalabilità di macchine virtuali usando un URL di firma di accesso condiviso di un BLOB di archiviazione che contiene uno script bash.
Set-AzVmssVMRunCommand -ResourceGroupName MyRG0 -VMScaleSetName MyVMSS -InstanceId 0 -RunCommandName MyRunCommand -Location EastUS2EUAP -SourceScriptUri <SourceScriptUri>
Nota
Nota: l'URL della firma di accesso condiviso deve fornire l'accesso in lettura al BLOB. Viene suggerita una scadenza di 24 ore per l'URL della firma di accesso condiviso (SAS). Gli URL SAS possono essere generati nel portale di Azure utilizzando le opzioni per il blob o creando un token SAS tramite New-AzStorageBlobSASToken. Se si genera un token SAS usando New-AzStorageBlobSASToken, URL SAS = URL BLOB base + "?" + token SAS da New-AzStorageBlobSASToken
.
Creare o aggiornare il comando di esecuzione su un'istanza di VM utilizzando i parametri Parameter e ProtectedParameter (Parametri pubblici e protetti per lo script)
$PublicParametersArray = @([Microsoft.Azure.PowerShell.Cmdlets.Compute.Models.Api20210701.IRunCommandInputParameter]@{name='publicParam1';value='publicParam1value'},
>> [Microsoft.Azure.PowerShell.Cmdlets.Compute.Models.Api20210701.IRunCommandInputParameter]@{name='publicParam2';value='publicParam2value'})
$ProtectedParametersArray = @([Microsoft.Azure.PowerShell.Cmdlets.Compute.Models.Api20210701.IRunCommandInputParameter]@{name='secret1';value='secret1value'},
>> [Microsoft.Azure.PowerShell.Cmdlets.Compute.Models.Api20210701.IRunCommandInputParameter]@{name='secret2';value='secret2value'})
Set-AzVMRunCommand -ResourceGroupName MyRG0 -VMName MyVMEE -RunCommandName MyRunCommand -Location EastUS2EUAP -SourceScriptUri <SourceScriptUri> -Parameter $PublicParametersArray -ProtectedParameter $ProtectedParametersArray
Usare ProtectedParameter
per passare qualsiasi input sensibile allo script, ad esempio password, chiavi e così via.
- Windows: Parameters e ProtectedParameters vengono passati allo script come argomenti e vengono eseguiti come questo
myscript.ps1 -publicParam1 publicParam1value -publicParam2 publicParam2value -secret1 secret1value -secret2 secret2value
- Linux: i parametri denominati e i relativi valori sono impostati sulla configurazione dell'ambiente, che deve essere accessibile all'interno dello script
.sh
. Per gli argomenti senza nome, passare una stringa vuota per assegnare un nome all'input. Gli argomenti senza nome vengono passati allo script ed eseguiti in questo modo:myscript.sh publicParam1value publicParam2value secret1value secret2value
Eliminare la risorsa RunCommand dalla VM
Rimuovere la risorsa RunCommand distribuita in precedenza nella VM. Se l'esecuzione dello script è ancora in corso, l'esecuzione viene terminata.
Remove-AzVMRunCommand -ResourceGroupName "myRG" -VMName "myVM" -RunCommandName "RunCommandName"
REST API (Interfaccia di Programmazione delle Applicazioni REST)
Per distribuire un nuovo comando Esegui, eseguire direttamente un'istruzione PUT nella VM e specificare un nome univoco per l'istanza esegui comando.
PUT /subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName>/providers/Microsoft.Compute/virtualMachines/<vmName>/runcommands?api-version=2019-12-01
{
"location": "<location>",
"properties": {
"source": {
"script": "Write-Host Hello World!",
"scriptUri": "<SAS URI of a storage blob with read access or public URI>",
"commandId": "<Id>"
},
"parameters": [
{
"name": "param1",
"value": "value1"
},
{
"name": "param2",
"value": "value2"
}
],
"protectedParameters": [
{
"name": "secret1",
"value": "value1"
},
{
"name": "secret2",
"value": "value2"
}
],
"runAsUser": "userName",
"runAsPassword": "userPassword",
"timeoutInSeconds": 3600,
"outputBlobUri": "< SAS URI of a storage append blob with read, add, create, write access>",
"errorBlobUri": "< SAS URI of a storage append blob with read, add, create, write access >"
}
}
Note
- È possibile fornire uno script inline, un URI di script o un ID comando script predefinito come origine di input. L'URI dello script è un URI SAS del blob di stoccaggio con accesso in lettura oppure un URI pubblico.
- Per un'esecuzione del comando è supportato un solo tipo di input di origine.
- Il comando Esegui supporta la scrittura di output ed errori nei blob di archiviazione utilizzando i parametri outputBlobUri e errorBlobUri, che possono essere usati per archiviare output di grandi dimensioni degli script. Usare l'URI SAS di un BLOB di accodamento di archiviazione con accesso in lettura, aggiunta, creazione, scrittura. Il blob dovrebbe essere del tipo AppendBlob. In caso contrario, la scrittura dell'output dello script o del BLOB degli errori non riuscirà. Il BLOB verrà sovrascritto se esiste già. Se non esiste, verrà creato.
Elencare le istanze in esecuzione di Esegui comando in una VM
GET /subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName>/providers/Microsoft.Compute/virtualMachines/<vmName>/runcommands?api-version=2019-12-01
Ottenere i dettagli dell'output per una distribuzione specifica di Esegui comando
GET /subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName>/providers/Microsoft.Compute/virtualMachines/<vmName>/runcommands/<runCommandName>?$expand=instanceView&api-version=2019-12-01
Eliminare una distribuzione specifica di Esegui comando
Eliminare l'istanza di Esegui comando
DELETE /subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName>/providers/Microsoft.Compute/virtualMachines/<vmName>/runcommands/<runCommandName>?api-version=2019-12-01
Distribuire script in una sequenza ordinata
Per distribuire gli script in sequenza, usare un modello di distribuzione, specificando una relazione dependsOn
tra script sequenziali.
{
"type":"Microsoft.Compute/virtualMachines/runCommands",
"name":"secondRunCommand",
"apiVersion":"2019-12-01",
"location":"[parameters('location')]",
"dependsOn":<full resourceID of the previous other Run Command>,
"properties":{
"source":{
"script":"echo Hello World!"
},
"timeoutInSeconds":60
}
}
Eseguire più comandi di esecuzione in sequenza
Per impostazione predefinita, se si distribuiscono più risorse RunCommand usando il modello di distribuzione, queste verranno eseguite contemporaneamente nella VM. Se si ha una dipendenza dagli script e un ordine di esecuzione preferito, è possibile usare la proprietà dependsOn
per renderli eseguiti in sequenza.
In questo esempio, secondRunCommand verrà eseguito dopo firstRunCommand.
{
"$schema":"https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion":"1.0.0.0",
"resources":[
{
"type":"Microsoft.Compute/virtualMachines/runCommands",
"name":"[concat(parameters('vmName'),'/firstRunCommand')]",
"apiVersion":"2019-12-01",
"location":"[parameters('location')]",
"dependsOn":[
"[concat('Microsoft.Compute/virtualMachines/', parameters('vmName'))]"
],
"properties":{
"source":{
"script":"echo First: Hello World!"
},
"parameters":[
{
"name":"param1",
"value":"value1"
},
{
"name":"param2",
"value":"value2"
}
],
"timeoutInSeconds":20
}
},
{
"type":"Microsoft.Compute/virtualMachines/runCommands",
"name":"[concat(parameters('vmName'),'/secondRunCommand')]",
"apiVersion":"2019-12-01",
"location":"[parameters('location')]",
"dependsOn":[
"[concat('Microsoft.Compute/virtualMachines/', parameters('vmName'),'runcommands/firstRunCommand')]"
],
"properties":{
"source":{
"scriptUri":"http://github.com/myscript.ps1"
},
"timeoutInSeconds":60
}
}
]
}
Passaggi successivi
Vedere Eseguire gli script nella macchina virtuale Linux per informazioni su altri modi per eseguire comandi e script in remoto nella macchina virtuale.