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