Share via


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

Gilt für: ✔️ Windows-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 Agenten der virtuellen Maschine (VM), um Skripte innerhalb einer Azure Windows VM auszuführen. 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.

Die aktualisierte verwaltete Skriptausführung verwendet den gleichen VM-Agent-Kanal zum Ausführen von Skripts und bietet die folgenden Verbesserungen im Vergleich zur ursprünglichen aktionsorientierten Skriptausführung:

  • 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

Unterstützte Windows-Betriebssysteme

Windows-Betriebssystem x64
Windows 10 Unterstützt
Windows 11 Unterstützt
Windows Server 2008 SP2 Unterstützt
Windows Server 2008 R2 Unterstützt
Windows Server 2012 Unterstützt
Windows Server 2012 R2 Unterstützt
Windows Server 2016 Unterstützt
Windows Server 2016 Core Unterstützt
Windows Server 2019 Unterstützt
Windows Server 2019 Core Unterstützt
Windows Server 2022 Unterstützt
Windows Server 2022 Core 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

Im folgenden Beispiel wird der Befehl az vm run-command verwendet, um ein Shellskript auf einer Azure Windows-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 "Write-Host 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 von Skriptausführung auf einer VM mithilfe von SourceScriptUri (der 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.

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

Hinweis

Die SAS-URL muss Lesezugriff auf das Blob bieten. 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“.

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

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

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

Beispielausgabe

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ührung-Skripts 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 Ausführen von Skriptausführung auslösen konnte oder nicht).

Erstellen oder Aktualisieren von Skriptausführung auf einer VM mithilfe von ScriptLocalPath (lokale Skriptdatei)

Erstellen oder aktualisieren Sie Skriptausführung auf einer VM mithilfe einer lokalen Skriptdatei, die sich auf dem Clientcomputer befindet, auf dem das Cmdlet ausgeführt wird.

Set-AzVMRunCommand -ResourceGroupName MyRG0 -VMName MyVMEE -RunCommandName MyRunCommand -Location EastUS2EUAP -ScriptLocalPath "C:\MyScriptsDir\MyScript.ps1"

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

Erstellen oder aktualisieren Sie Skriptausführung auf einem virtuellen Computer, der den Skriptinhalt direkt an den „-SourceScript“-Parameter ü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 von Skriptausführung auf einer VM mithilfe von SourceCommandId

Erstellen oder Aktualisieren Sie Skriptausführung auf einer VM mithilfe einer bereits vorhandenen commandId. Verfügbare commandIds können mithilfe von Get-AzVMRunCommandDocument abgerufen werden.

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

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 -ScriptLocalPath "C:\MyScriptsDir\MyScript.ps1" -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 auf das Blob bieten. 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.

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

Erstellen oder aktualisieren Sie Skriptausführung mithilfe von RunAsUser- und RunAsPassword-Parametern als anderer Benutzer auf einer VM. Damit RunAs ordnungsgemäß funktioniert, wenden Sie sich an den*die Administrator*in der VM, und stellen Sie sicher, dass der Benutzer auf der VM hinzugefügt wurde und Zugriff auf Ressourcen hat, auf die Skriptausführung zugreift (Verzeichnisse, Dateien, Netzwerk usw.), und dass im Falle einer Windows-VM der Dienst „Sekundäre Anmeldung“ auf der VM ausgeführt wird.

Set-AzVMRunCommand -ResourceGroupName MyRG0 -VMName MyVMEE -RunCommandName MyRunCommand -Location EastUS2EUAP -ScriptLocalPath "C:\MyScriptsDir\MyScript.ps1" -RunAsUser myusername -RunAsPassword mypassword

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

Erstellen oder aktualisieren Sie Skriptausführung auf einer Virtual Machine Scale Sets-Ressource mithilfe der SAS-URL eines Speicherblobs, das ein PowerShell-Skript enthält.

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

Hinweis

Die SAS-URL muss Lesezugriff auf das Blob bieten. 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 von Skriptausführung auf einer VM-Instanz mithilfe der Parameter „Parameter“ und „ProtectedParameter“ (öffentliche und geschützte Parameter im Skript)

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

$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
  • 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 Eingabe. 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/<runCommandName>?api-version=2023-03-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,
    "treatFailureAsDeploymentFailure": true,
    "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
  • Ab API-Version 2023-03-01 können Sie die Eigenschaft treatFailureAsDeploymentFailure auf true festlegen, wodurch die Bereitstellung nicht erfolgreich ist, wenn im Skript ein Fehler auftritt. Wenn diese Eigenschaft auf false festgelegt ist, gibt ProvisioningState nur an, ob der Ausführungsbefehl von der Erweiterungsplattform ausgeführt wurde. Es wird nicht angegeben, ob das Skript bei Skriptfehlern fehlgeschlagen ist.
  • 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=2023-03-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=2023-03-01

Löschen einer bestimmten Skriptausführung-Bereitstellung

Sie können auch die Instanz der Skriptausführung löschen.

DELETE /subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName>/providers/Microsoft.Compute/virtualMachines/<vmName>/runcommands/<runCommandName>?api-version=2023-03-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": "Write-Host 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":"2023-03-01",
         "location":"[parameters('location')]",
         "dependsOn":[
            "[concat('Microsoft.Compute/virtualMachines/', parameters('vmName'))]"
         ],
         "properties":{
            "source":{
               "script":"Write-Host 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 anderen Möglichkeiten für die Remoteausführung von Skripts und Befehlen in Ihrer VM finden Sie unter Ausführen von Skripts in Ihrer Windows-VM.