Freigeben über


Ausführen von Skripts auf Ihrem virtuellen Windows-Computer mithilfe der Aktion Befehle ausführen

Das Feature „Befehl ausführen“ verwendet den VM-Agent, um PowerShell-Skripts 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 Zugriffs- und Netzwerkprobleme eines virtuellen Computers schnell diagnostizieren und beheben und den virtuellen Computer wieder in einen funktionierenden Zustand versetzen.

Vorteile

Sie können auf verschiedene Weise auf Ihre virtuellen Computer zugreifen. Die Skriptausführung kann Skripts remote unter Verwendung des VM-Agents auf Ihren virtuellen Computern ausführen. „Befehl ausführen“ kann für Windows-VMs über das Azure-Portal, die REST-API oder PowerShell verwendet werden.

Diese Funktion ist in allen Szenarien sinnvoll, in denen Sie ein Skript innerhalb eines virtuellen Computers ausführen möchten. Es ist eine der wenigen Möglichkeiten, Fehler auf einem virtuellen Computer zu beheben, bei dem der RDP- oder SSH-Port aufgrund einer falschen Netzwerk- oder Administratorkonfiguration nicht geöffnet ist.

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

Beschränkungen

Die Verwendung der Skriptausführung unterliegt den folgenden Einschränkungen:

  • Die Ausgabe ist auf die letzten 4.096 Bytes beschränkt.
  • Der Mindestzeitraum für die Ausführung eines Skripts liegt bei etwa 20 Sekunden.
  • Skripts werden unter Windows als „System“ ausgeführt.
  • Es kann Zeit jeweils nur ein Skript gleichzeitig ausgeführt werden.
  • Skripts, die Informationen anfordern (interaktiver Modus), werden nicht unterstützt.
  • Die Ausführung von Skripts kann nicht abgebrochen werden.
  • Die maximal zulässige Ausführungsdauer eines Skripts beträgt 90 Minuten. Danach tritt ein Timeout auf.
  • Um die Ergebnisse des Skripts zurückzugeben, ist eine ausgehende Konnektivität des virtuellen Computers erforderlich.
  • Es wird davon abgeraten, ein Skript auszuführen, das bewirkt, dass der VM-Agent beendet oder aktualisiert wird. Das kann dazu führen, dass die Erweiterung in einem Übergangszustand verbleibt, wodurch ein Timeout verursacht wird.

Hinweis

Damit die Skriptausführung richtig funktioniert, ist Konnektivität (Port 443) mit öffentlichen Azure-IP-Adressen erforderlich. Wenn die Erweiterung keinen Zugriff auf diese Endpunkte hat, werden die Skripts zwar möglicherweise erfolgreich ausgeführt, geben aber keine Ergebnisse zurück. Wenn Sie Datenverkehr auf dem virtuellen Computer blockieren, können Sie Diensttags verwenden, um Datenverkehr mit öffentlichen Azure-IP-Adressen über das Tag AzureCloud zuzulassen.

Das Feature „Befehl ausführen“ funktioniert nicht, wenn der Status des VM-Agents „NOT READY“ (NICHT BEREIT) lautet. Überprüfen Sie den Agent-Status im Azure-Portal in den Eigenschaften des virtuellen Computers.

Verfügbare Befehle

Diese Tabelle enthält die Liste der für virtuelle Windows-Computer verfügbaren Befehle. Mit dem Befehl RunPowerShellScript können Sie jedes beliebige benutzerdefinierte Skript ausführen. Wenn Sie einen Befehl mithilfe der Azure-Befehlszeilenschnittstelle oder über PowerShell ausführen, muss für den Parameter --command-id oder -CommandId einer der Werte aus der folgenden Liste angegeben werden. Wenn Sie einen Wert angeben, bei dem es sich nicht um einen verfügbaren Befehl handelt, tritt der folgende Fehler auf:

The entity was not found in this Azure location

Name Beschreibung
RunPowerShellScript Führt ein PowerShell-Skript aus.
DisableNLA Deaktiviert die Authentifizierung auf Netzwerkebene.
DisableWindowsUpdate Deaktiviert automatische Updates per Windows Update.
EnableAdminAccount Überprüft, ob das lokale Administratorkonto deaktiviert ist, und aktiviert es, wenn das der Fall ist.
EnableEMS Aktiviert EMS.
EnableRemotePS Konfiguriert den Computer für die Aktivierung von remote-PowerShell.
EnableWindowsUpdate Aktiviert automatische Updates per Windows Update.
IPConfig Zeigt detaillierte Informationen für die IP-Adresse, die Subnetzmaske und das Standardgateway für jeden an TCP/IP gebundenen Adapter an.
RDPSettings Überprüft Registrierungseinstellungen und Domänen-Richtlinieneinstellungen. Schlägt Richtlinienaktionen vor, wenn der Computer Teil einer Domäne ist, oder ändert die Einstellungen in Standardwerte.
ResetRDPCert Entfernt das TLS-/SSL-Zertifikat, das an den RDP-Listener gebunden ist, und stellt die Standardwerte für die Sicherheit des RDP-Listeners wieder her. Verwenden Sie dieses Skript, wenn irgendwelche Probleme in Verbindung mit dem Zertifikat auftreten.
SetRDPPort Legt die standardmäßige oder vom Benutzer angegebene Portnummer für Remote Desktop-Verbindungen fest. Aktiviert die Firewallregeln für eingehenden Zugriff auf den Port.

Azure CLI

Im folgenden Beispiel wird der Befehl az vm run-command verwendet, um ein Shellskript auf einer Azure Linux-VM auszuführen.

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

Azure-Portal

Navigieren Sie im Azure-Portal zu einem virtuellen Computer, und wählen Sie im linken Menü unter Vorgänge die Option Befehl ausführen aus. Daraufhin wird eine Liste mit den verfügbaren Befehlen angezeigt, die auf dem virtuellen Computer ausgeführt werden können.

Befehlsliste

Wählen Sie einen auszuführenden Befehl aus. Einige der Befehle verfügen möglicherweise über optionale oder erforderliche Eingabeparameter. Bei diesen Befehlen werden die Parameter in Form von Textfeldern für die Eingabewerte angezeigt. Für jeden Befehl können Sie das ausgeführte Skript anzeigen, indem Sie Skript anzeigen erweitern. RunPowerShellScript unterscheidet sich insofern von den anderen Befehlen, als es Ihnen die Angabe eines eigenen, benutzerdefinierten Skripts ermöglicht.

Hinweis

Die integrierten Befehle können nicht bearbeitet werden.

Nachdem Sie den Befehl ausgewählt haben, wählen Sie Ausführen aus, um das Skript auszuführen. Nach Abschluss des Skripts gibt es die Ausgabe und eventuelle Fehler im Ausgabefenster zurück. Der folgende Screenshot zeigt eine Beispielausgabe für die Ausführung des RDPSettings-Befehls.

Skriptausgabe von „Befehl ausführen“

PowerShell

Im folgenden Beispiel wird das Cmdlet Invoke-AzVMRunCommand zum Ausführen eines PowerShell-Skripts auf einem virtuellen Azure-Computer verwendet. Für das Cmdlet gilt, dass das im Parameter -ScriptPath referenzierte Skript am Ausführungsort des Cmdlets lokal sein muss.

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

Hinweis

Parameterwerte können nur vom Typ „Zeichenfolge“ sein, und das Skript ist dafür verantwortlich, sie bei Bedarf in andere Typen zu konvertieren.

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/runCommands/action 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.

Problembehandlung für aktionsbezogene Ausführungsbefehle unter Windows

Bei der Problembehandlung für aktionsbezogene Ausführungsbefehle in Windows-Umgebungen können Sie die Protokolldatei RunCommandExtension heranziehen, um ausführlichere Informationen zu erhalten. Diese befindet sich in der Regel im folgenden Verzeichnis: C:\WindowsAzure\Logs\Plugins\Microsoft.CPlat.Core.RunCommandWindows\<version>\RunCommandExtension.log.

Bekannte Probleme

  • Die Erweiterung für aktionsbezogene Ausführungsbefehle wird in Ihrer Windows-Umgebung möglicherweise nicht erfolgreich ausgeführt, wenn der Befehl reservierte Zeichen enthält. Beispiel:

    Wenn das Symbol & im Parameter Ihres Befehls übergeben wird, wie im folgenden PowerShell-Skript zu sehen, ist der Befehl möglicherweise nicht erfolgreich.

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

    Verwenden Sie in dem Argument das Zeichen ^ als Escapezeichen für & (z. B. $paramm='abc^&jj').

  • Die Erweiterung „Skriptausführung“ wird ggf. auch nicht erfolgreich ausgeführt, wenn der auszuführende Befehl „\n“ im Pfad enthält, da dies als neue Zeile behandelt wird. C:\Windows\notepad.exe enthält beispielsweise \n im Dateipfad. Ersetzen Sie \n in Ihrem Pfad ggf. durch \N.

  • Stellen Sie sicher, dass sie keine benutzerdefinierte Einstellung im Registrierungsschlüssel HKLM\SOFTWARE\Microsoft\Command Processor\AutoRun haben (detaillierte Informationen finden Sie hier). Dies könnte während der Installations- oder Aktivierungsphase der RunCommand-Erweiterung ausgelöst werden und einen Fehler wie „XYZ wird nicht als interner oder externer Befehl, lauffähiges Programm oder Batchdatei erkannt“ verursachen.

Entfernen aktionsbezogener Ausführungsbefehle

Wenn Sie Ihre Windows-Erweiterung für aktionsbezogene Ausführungsbefehle entfernen müssen, können Sie die folgenden Schritte für Azure PowerShell und für die CLI verwenden:

Ersetzen Sie rgname und vmname in den folgenden Entfernungsbeispielen jeweils durch Ihren relevanten Ressourcengruppennamen bzw. VM-Namen:

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

Hinweis

Wenn Sie einen Ausführungsbefehl erneut anwenden, wird die Erweiterung automatisch installiert. Sie können den Befehl zum Entfernen der Erweiterung verwenden, um Probleme im Zusammenhang mit der Erweiterung zu beheben.

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.