Freigeben über


Ausführen von Skripts auf Ihrem virtuellen Linux-Computer mithilfe verwalteter Skriptausführungen

Gilt für: ✔️ Linux-VMs ✔️ Flexible Skalierungsgruppen

Wichtig

Der Befehl „Managed Run“ (Verwaltete Ausführung) ist derzeit in der Azure CLI, PowerShell und der API verfügbar. Die Portalfunktionalität wird in Kürze verfügbar sein.

Die Funktion „Befehl ausführen“ verwendet den VM-Agent für die Ausführung von Skripts in einer Azure Linux-VM. Diese Skripts können für die allgemeine Computer- oder Anwendungsverwaltung verwendet werden. Mit ihrer Hilfe können Sie VM-Zugriffs- und -Netzwerkprobleme schnell diagnostizieren und beheben und die VM wieder in einen funktionierenden Zustand versetzen.

Der aktualisierte verwaltete Ausführungsbefehl verwendet denselben VM-Agentenkanal zur Ausführung von Skripten und bietet die folgenden Verbesserungen gegenüber dem ursprünglichen aktionsorientierten Ausführungsbefehl:

  • Unterstützung für aktualisierte Skriptausführung über eine ARM-Bereitstellungsvorlage
  • Parallele Ausführung mehrerer Skripts
  • Sequenzielle Ausführung von Skripts
  • Vom Benutzer angegebenes Skripttimeout
  • Unterstützung für zeitintensive Skripts (Stunden/Tage)
  • Sicheres Übergeben von Geheimnissen (Parameter, Kennwörter)

Voraussetzungen

Wichtig

Der mindestens unterstützte Linux-Gast-Agent ist Version 2.4.0.2. Ältere Versionen unterstützen „Managed RunCommand“ nicht.

Unterstützte Linux-Distributionen

Linux-Distribution x64 ARM64
Alma Linux 9.x und höher Nicht unterstützt
Debian 10+ Nicht unterstützt
Flatcar Linux 3374.2.x+ Nicht unterstützt
Azure Linux 2.x Nicht unterstützt
openSUSE 12.3+ Nicht unterstützt
Oracle Linux 6.4+, 7.x+, 8.x+ Nicht unterstützt
Red Hat Enterprise Linux 6.7+, 7.x+, 8.x+ Nicht unterstützt
Rocky Linux 9.x und höher Nicht unterstützt
SLES 12.x+, 15.x+ Nicht unterstützt
Ubuntu 18.04+, 20.04+, 22.04+ Nicht unterstützt

Einschränken des Zugriffs auf „Befehl ausführen“

Zum Auflisten der ausführbaren Befehle oder Anzeigen der Details zu einem Befehl ist die Berechtigung Microsoft.Compute/locations/runCommands/read auf Abonnementebene erforderlich. Die integrierte Rolle Leser und höhere Rollen verfügen über diese Berechtigung.

Zum Ausführen eines Befehls ist die Berechtigung Microsoft.Compute/virtualMachines/runCommand/write erforderlich. Die Rolle Mitwirkender für virtuelle Computer und höhere Rollen verfügen über diese Berechtigung.

Für die Skriptausführung können Sie eine der integrierten Rollen verwenden oder eine benutzerdefinierte Rolle erstellen.

Azure CLI

Die folgenden Beispiele verwenden az vm run-command, um ein Shell-Skript auf einer Azure Linux VM auszuführen.

Ausführen eines Skripts mit der VM

Dieser Befehl übermittelt das Skript an die VM, führt es aus und gibt die erfasste Ausgabe zurück.

az vm run-command create --name "myRunCommand" --vm-name "myVM" --resource-group "myRG" --script "echo Hello World!"

Auflisten aller bereitgestellten RunCommand-Ressourcen auf einer VM

Dieser Befehl gibt eine vollständige Liste der zuvor bereitgestellten Skriptausführungen zusammen mit ihren Eigenschaften zurück.

az vm run-command list --vm-name "myVM" --resource-group "myRG"

Abrufen des Ausführungsstatus und der Ergebnisse

Dieser Befehl ruft den aktuellen Ausführungsstatus ab, z. B. die aktuelle Ausgabe, die Start-/Endzeit, den Exitcode und den Endzustand der Ausführung.

az vm run-command show --name "myRunCommand" --vm-name "myVM" --resource-group "myRG" --expand instanceView

Hinweis

Ausgabe- und Fehlerfelder in instanceView sind auf die letzten 4 KB beschränkt. Wenn Sie auf die vollständige Ausgabe und den ganzen Fehler zugreifen möchten, haben Sie die Möglichkeit, die Ausgabe- und Fehlerdaten mithilfe von -outputBlobUri- und -errorBlobUri-Parametern an Speicheranfügeblobs weiterzuleiten, während Sie die Skriptausführung mit Set-AzVMRunCommand oder Set-AzVMssRunCommand ausführen.

Löschen der RunCommand-Ressource von der VM

Entfernen Sie die zuvor auf der VM bereitgestellte RunCommand-Ressource. Wenn die Skriptausführung aktuell noch stattfindet, wird die Ausführung beendet.

az vm run-command delete --name "myRunCommand" --vm-name "myVM" --resource-group "myRG"

PowerShell

Ausführen eines Skripts mit der VM

Dieser Befehl übermittelt das Skript an die VM, führt es aus und gibt die erfasste Ausgabe zurück.

Set-AzVMRunCommand -ResourceGroupName "myRG" -VMName "myVM" -Location "EastUS" -RunCommandName "RunCommandName" –SourceScript "echo Hello World!"

Ausführen eines Skripts auf dem virtuellen Computer mithilfe des SourceScriptUri-Parameters

OutputBlobUri und ErrorBlobUri sind optionale Parameter.

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>”

Auflisten aller bereitgestellten RunCommand-Ressourcen auf einer VM

Dieser Befehl gibt eine vollständige Liste der zuvor bereitgestellten Skriptausführungen zusammen mit ihren Eigenschaften zurück.

Get-AzVMRunCommand -ResourceGroupName "myRG" -VMName "myVM"

Abrufen des Ausführungsstatus und der Ergebnisse

Dieser Befehl ruft den aktuellen Ausführungsstatus ab, z. B. die aktuelle Ausgabe, die Start-/Endzeit, den Exitcode und den Endzustand der Ausführung.

Get-AzVMRunCommand -ResourceGroupName "myRG" -VMName "myVM" -RunCommandName "RunCommandName" -Expand instanceView

Erstellen oder Aktualisieren der Skriptausführung auf einer VM mithilfe von SourceScriptURI (SAS-URL des Speicherblobs)

Erstellen oder aktualisieren Sie Skriptausführung auf einer Windows-VM mithilfe der SAS-URL eines Speicherblobs, das ein PowerShell-Skript enthält. SourceScriptUri kann die vollständige SAS-URL oder öffentliche URL eines Speicherblobs sein.

Hinweis

Die SAS-URL muss Lesezugriff auf das Blob ermöglichen. Für die SAS-URL wird eine Ablaufzeit von 24 Stunden vorgeschlagen. SAS-URLs können im Azure-Portal über die Bloboptionen oder mit dem SAS-Token unter Verwendung von New-AzStorageBlobSASToken generiert werden. Wenn Sie SAS-Token mithilfe von New-AzStorageBlobSASToken generieren, lautet das Format der SAS-URL „Basisblob-URL“ + „?“ + „SAS-Token aus New-AzStorageBlobSASToken“.

Set-AzVMRunCommand -ResourceGroupName MyRG0 -VMName MyVMEE -RunCommandName MyRunCommand -Location EastUS2EUAP -SourceScriptUri <SourceScriptURI>

Abrufen der Instanzansicht der Skriptausführung für eine VM nach dem Erstellen oder Aktualisieren der Skriptausführung

Rufen Sie die Skriptausführung für eine VM mit Instanzansicht auf. Die Instanzansicht enthält den Ausführungsstatus der Skriptausführung (Erfolgreich, Fehler usw.), den Exitcode, die Standardausgabe und den Standardfehler, der durch Ausführen des Skripts mithilfe der Skriptausführung erzeugt wird. Ein Exitcode ungleich Null kennzeichnet eine nicht erfolgreiche Ausführung.

$x = Get-AzVMRunCommand -ResourceGroupName MyRG -VMName MyVM -RunCommandName MyRunCommand -Expand InstanceView
$x.InstanceView

Erwartete Ausgabe:

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: Status des Skriptausführungsskripts des Benutzers. Dieser Status gibt an, ob die Ausführung des Skripts erfolgreich war oder nicht.

ProvisioningState: Status der gesamten Erweiterungsbereitstellung (unabhängig davon, ob die Erweiterungsplattform das Skriptausführungsskript auslösen konnte oder nicht)

Erstellen oder Aktualisieren der Skriptausführung auf einer VM mithilfe von SourceScript (Skripttext)

Erstellen oder aktualisieren Sie die Skriptausführung auf einem virtuellen Computer, der den Skriptinhalt direkt an den Parameter „-SourceScript“ übergibt. Verwenden Sie ;, um mehrere Befehle zu trennen.

Set-AzVMRunCommand -ResourceGroupName MyRG0 -VMName MyVML -RunCommandName MyRunCommand2 -Location EastUS2EUAP -SourceScript "id; echo HelloWorld"

Erstellen oder Aktualisieren der Skriptausführung auf einer VM mithilfe von SourceCommandId

Erstellen oder aktualisieren Sie die Skriptausführung auf einem virtuellen Computer mithilfe einer bereits vorhandenen Befehls-ID (commandId). Verfügbare Befehls-IDs (commandIds) können mithilfe von Get-AzVMRunCommandDocument abgerufen werden.

Set-AzVMRunCommand -ResourceGroupName MyRG0 -VMName MyVMEE -RunCommandName MyRunCommand -Location EastUS2EUAP -SourceCommandId ipconfig

Erstellen oder Aktualisieren von Skriptausführung auf einer VM mithilfe von OutputBlobUri und ErrorBlobUri, um Standardausgabe- und Standardfehlermeldungen an Ausgabe- und Fehleranfügeblobs anzuhängen

Erstellen oder aktualisieren Sie Skriptausführung auf einer VM, und streamen Sie Standardausgabe- und Standardfehlermeldungen in Ausgabe- und Fehleranfügeblobs.

Set-AzVMRunCommand -ResourceGroupName MyRG0 -VMName MyVML -RunCommandName MyRunCommand3 -Location EastUS2EUAP EastUS2EUAP -SourceScriptUri <SourceScriptUri> -OutputBlobUri <OutputBlobUri> -ErrorBlobUri <errorbloburi>

Hinweis

Ausgabe- und Fehlerblobs müssen vom Typ AppendBlob sein, und ihre SAS-URLs müssen Lese-, Anfüge-, Erstellungs- und Schreibzugriff für das Blob ermöglichen. Für die SAS-URL wird eine Ablaufzeit von 24 Stunden vorgeschlagen. Wenn kein Ausgabe- oder Fehlerblob vorhanden ist, wird ein Blob vom Typ „AppendBlob“ erstellt. SAS-URLs können im Azure-Portal über die Bloboptionen oder mit dem SAS-Token unter Verwendung von „New-AzStorageBlobSASToken“ generiert werden. Wenn Sie SAS-Token mithilfe von New-AzStorageBlobSASToken generieren, lautet das Format der SAS-URL „Basisblob-URL“ + „?“ + „SAS-Token aus New-AzStorageBlobSASToken“.

Erstellen oder Aktualisieren der Skriptausführung, Ausführen der Skriptausführung auf einer VM als anderer Benutzer mithilfe der Parameter „RunAsUser“ und „RunAsPassword“

Erstellen oder aktualisieren Sie die Skriptausführung auf einem virtuellen Computer, und führen Sie die Skriptausführung als anderer Benutzer mithilfe der Parameter RunAsUser und RunAsPassword aus. Damit RunAs ordnungsgemäß funktioniert, wenden Sie sich an den Administrator des virtuellen Computers, und stellen Sie sicher, dass der Benutzer auf dem virtuellen Computer hinzugefügt wurde und Zugriff auf Ressourcen hat, auf die die Skriptausführung zugreift (Verzeichnisse, Dateien, Netzwerk usw.). Vergewissern Sie sich zudem, dass im Falle eines virtuellen Windows-Computers der Dienst „Sekundäre Anmeldung“ auf dem virtuellen Computer ausgeführt wird.

Set-AzVMRunCommand -ResourceGroupName MyRG0 -VMName MyVMEE -RunCommandName MyRunCommand -Location EastUS2EUAP EastUS2EUAP -SourceScriptUri <SourceScriptUri> -RunAsUser myusername -RunAsPassword mypassword

Erstellen oder Aktualisieren der Skriptausführung für eine Virtual Machine Scale Sets-Ressource mithilfe von SourceScriptUri (SAS-URL des Speicherblobs)

Erstellen oder aktualisieren Sie die Skriptausführung für eine Virtual Machine Scale Sets-Ressource mithilfe der SAS-URL eines Speicherblobs, das ein Bash-Skript enthält.

Set-AzVmssVMRunCommand -ResourceGroupName MyRG0 -VMScaleSetName MyVMSS -InstanceId 0 -RunCommandName MyRunCommand -Location EastUS2EUAP -SourceScriptUri <SourceScriptUri>

Hinweis

Beachten Sie, dass die SAS-URL Lesezugriff auf das Blob ermöglichen muss. Für die SAS-URL wird eine Ablaufzeit von 24 Stunden vorgeschlagen. SAS-URLs können im Azure-Portal über die Bloboptionen oder mit dem SAS-Token unter Verwendung von „New-AzStorageBlobSASToken“ generiert werden. Wenn Sie SAS-Token mithilfe von „New-AzStorageBlobSASToken“ generieren, lautet das Format der SAS-URL „Basisblob-URL“ + „?“ + „SAS-Token aus New-AzStorageBlobSASToken“.

Erstellen oder Aktualisieren der Skriptausführung auf einer VM-Instanz mithilfe der Parameter „Parameter“ und „ProtectedParameter“ (öffentliche und geschützte Parameter im Skript)

$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

Verwenden Sie ProtectedParameter, um alle vertraulichen Eingaben (z. B. Kennwörter, Schlüssel usw.) an Skripts zu übergeben.

  • Windows: Die Parameter „Parameter“ und „ProtectedParameter“ werden an das Skript übergeben, wenn Argumente an das Skript übergeben und wie folgt ausgeführt werden: myscript.ps1 -publicParam1 publicParam1value -publicParam2 publicParam2value -secret1 secret1value -secret2 secret2value
  • Linux: Benannte Parameter und ihre Werte werden auf die Umgebungskonfiguration festgelegt, die innerhalb des .sh-Skripts zugänglich sein sollte. Übergeben Sie für namenlose Argumente eine leere Zeichenfolge an die Namenseingabe. Namenlose Argumente werden an das Skript übergeben und wie folgt ausgeführt: myscript.sh publicParam1value publicParam2value secret1value secret2value

Löschen der RunCommand-Ressource von der VM

Entfernen Sie die zuvor auf der VM bereitgestellte RunCommand-Ressource. Wenn die Skriptausführung aktuell noch stattfindet, wird die Ausführung beendet.

Remove-AzVMRunCommand -ResourceGroupName "myRG" -VMName "myVM" -RunCommandName "RunCommandName"

REST-API

Um eine neue Skriptausführung bereitzustellen, führen Sie einen PUT-Befehl direkt auf der VM aus, und geben Sie einen eindeutigen Namen für die Skriptausführungsinstanz an.

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 >"  
    }
}

Notizen

  • Sie können ein Inline-Skript, einen Skript-URI oder eine Befehls-ID eines integrierten Skripts als Eingabequelle angeben Der Skript-URI ist entweder ein Speicherblob-SAS-URI mit Lesezugriff oder ein öffentlicher URI.
  • Für die Ausführung eines Befehls wird nur eine Art der Quelleingabe unterstützt
  • Die Skriptausführung unterstützt das Schreiben der Ausgabe und des Fehlers in Speicherblobs mithilfe der Parameter „outputBlobUri“ und „errorBlobUri“, die zum Speichern umfangreicher Skriptausgaben verwendet werden können. Verwenden Sie den SAS-URI eines Speicheranfügeblobs mit Zugriff zum Lesen, Hinzufügen, Erstellen und Schreiben. Der Blob sollte den Typ „AppendBlob“ haben. Andernfalls tritt beim Schreiben der Skriptausgabe oder des Fehlerblobs ein Fehler auf. Das Blob wird überschrieben, wenn es bereits vorhanden ist. Wird erstellt, wenn er noch nicht vorhanden ist.

Auflisten ausgeführter Instanzen der Skriptausführung auf einer VM

GET /subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName>/providers/Microsoft.Compute/virtualMachines/<vmName>/runcommands?api-version=2019-12-01

Abrufen von Ausgabedetails für eine bestimmte Skriptausführungsbereitstellung

GET /subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName>/providers/Microsoft.Compute/virtualMachines/<vmName>/runcommands/<runCommandName>?$expand=instanceView&api-version=2019-12-01 

Löschen einer bestimmten Skriptausführungsbereitstellung

Löschen der Skriptausführungsinstanz

DELETE /subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName>/providers/Microsoft.Compute/virtualMachines/<vmName>/runcommands/<runCommandName>?api-version=2019-12-01 

Bereitstellen von Skripts in einer geordneten Reihenfolge

Um Skripts sequenziell bereitzustellen, verwenden Sie eine Bereitstellungsvorlage, die eine dependsOn-Beziehung zwischen sequenziellen Skripts angibt.

{ 
    "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
    }
}

Sequenzielles Ausführen mehrerer Skriptausführungen

Wenn Sie mehrere RunCommand-Ressourcen mithilfe einer Bereitstellungsvorlage bereitstellen, werden diese standardmäßig gleichzeitig auf der VM ausgeführt. Wenn Sie eine Abhängigkeit von den Skripts und eine bevorzugte Ausführungsreihenfolge haben, können Sie die dependsOn-Eigenschaft verwenden, damit sie sequenziell ausgeführt werden.

In diesem Beispiel wird secondRunCommand nach firstRunCommand ausgeführt.

{
   "$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
         }
      }
   ]
}

Nächste Schritte

Informationen zu weiteren Möglichkeiten für die Remoteausführung von Skripts und Befehlen auf Ihrem virtuellen Computer finden Sie unter Ausführen von Skripts in Ihrer Linux-VM.