Scripts uitvoeren in je Windows-VM met behulp van de actie Uitvoeropdrachten

De functie Opdracht uitvoeren maakt gebruik van de VM-agent (virtuele machine) om PowerShell-scripts uit te voeren binnen een Azure Windows-VM. U kunt deze scripts gebruiken voor algemeen machine- of toepassingsbeheer. Ze kunnen u helpen om snel problemen met vm-toegang en netwerktoegang vast te stellen en op te lossen en de VM weer in een goede staat te krijgen.

Voordelen

U kunt op meerdere manieren toegang krijgen tot uw virtuele machines. Opdracht uitvoeren kan scripts op uw virtuele machines extern uitvoeren met behulp van de VM-agent. U gebruikt Opdracht uitvoeren via de Azure Portal, REST API of PowerShell voor Windows-VM's.

Deze mogelijkheid is handig in alle scenario's waarin u een script op een virtuele machine wilt uitvoeren. Dit is een van de enige manieren om problemen met een virtuele machine op te lossen en te herstellen waarvoor de RDP- of SSH-poort niet is geopend vanwege een onjuiste netwerk- of gebruikersconfiguratie met beheerdersrechten.

Vereisten

Ondersteund Windows-besturingssysteem

Windows OS x64
Windows 10 Ondersteund
Windows 11 Ondersteund
Windows Server 2008 SP2 Ondersteund
Windows Server 2008 R2 Ondersteund
Windows Server 2012 Ondersteund
Windows Server 2012 R2 Ondersteund
Windows Server 2016 Ondersteund
Windows Server 2016 Core Ondersteund
Windows Server 2019 Ondersteund
Windows Server 2019 Core Ondersteund
Windows Server 2022 Ondersteund
Windows Server 2022 Core Ondersteund

Beperkingen

De volgende beperkingen zijn van toepassing wanneer u de Uitvoeropdracht gebruikt:

  • De uitvoer is beperkt tot de laatste 4096 bytes.
  • De minimale tijd voor het uitvoeren van een script is ongeveer 20 seconden.
  • Scripts worden als Systeem uitgevoerd op Windows.
  • Er kan één script tegelijk worden uitgevoerd.
  • Scripts die om informatie vragen (interactieve modus) worden niet ondersteund.
  • U kunt een actief script niet annuleren.
  • De maximale tijd voor het uitvoeren van een script is 90 minuten. Daarna treedt een time-out op.
  • Uitgaande connectiviteit van de VM is vereist om de resultaten van het script te retourneren.
  • Het wordt niet aanbevolen om een script uit te voeren dat een stop of update van de VM-agent veroorzaakt. De extensie kan hierdoor de status Overgang krijgen, wat kan leiden tot een time-out.

Notitie

Voor de juiste werking van de opdracht Uitvoeren is connectiviteit (poort 443) met openbare IP-adressen van Azure vereist. Als de extensie geen toegang heeft tot deze eindpunten, worden de scripts mogelijk uitgevoerd, maar worden de resultaten niet geretourneerd. Als u verkeer op de virtuele machine blokkeert, kunt u servicetags gebruiken om verkeer naar openbare IP-adressen van Azure toe te staan met behulp van de AzureCloud tag.

De functie Opdracht uitvoeren werkt niet als de status van de VM-agent NIET GEREED is. Controleer de status van de agent in de eigenschappen van de VM in de Azure Portal.

Beschikbare opdrachten

In deze tabel ziet u de lijst met beschikbare opdrachten voor Windows-VM's. U kunt de opdracht RunPowerShellScript gebruiken om elk aangepast script uit te voeren dat u wilt. Wanneer u de Azure CLI of PowerShell gebruikt om een opdracht uit te voeren, moet de waarde die u opgeeft voor de --command-id parameter of -CommandId een van de volgende vermelde waarden zijn. Wanneer u een waarde opgeeft die geen beschikbare opdracht is, ontvangt u deze fout:

The entity was not found in this Azure location

Naam Beschrijving
PowerShellScript uitvoeren Een PowerShell-script uitvoeren
DisableNLA Verificatie op netwerkniveau uitschakelen
DisableWindowsUpdate Automatische Updates van Windows Update uitschakelen
EnableAdminAccount Hiermee wordt gecontroleerd of het lokale beheerdersaccount is uitgeschakeld en zo ja, schakelt u het in.
EnableEMS EMS inschakelen
EnableRemotePS Hiermee configureert u de computer om externe PowerShell in te schakelen.
EnableWindowsUpdate Automatische Updates Windows Update inschakelen
Ipconfig Geeft gedetailleerde informatie weer voor het IP-adres, het subnetmasker en de standaardgateway voor elke adapter die is gebonden aan TCP/IP.
RDPSettings Hiermee worden registerinstellingen en domeinbeleidsinstellingen gecontroleerd. Stelt beleidsacties voor als de computer deel uitmaakt van een domein of de instellingen wijzigt in standaardwaarden.
ResetRDPCert Hiermee verwijdert u het TLS/SSL-certificaat dat is gekoppeld aan de RDP-listener en herstelt u de standaardbeveiliging van de RDP-listener. Gebruik dit script als u problemen met het certificaat ziet.
SetRDPPort Hiermee stelt u het standaardpoortnummer of het door de gebruiker opgegeven poortnummer in voor Extern bureaublad-verbindingen. Hiermee schakelt u firewallregels in voor binnenkomende toegang tot de poort.

Azure CLI

In het volgende voorbeeld wordt de opdracht az vm run-command gebruikt om een shellscript uit te voeren op een Azure Windows-VM.

# 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

Ga naar een virtuele machine in de Azure Portal en selecteer Opdracht uitvoeren in het linkermenu onder Bewerkingen. U ziet een lijst met de beschikbare opdrachten die u op de VM kunt uitvoeren.

Lijst met opdrachten

Kies een opdracht die u wilt uitvoeren. Sommige opdrachten hebben mogelijk optionele of vereiste invoerparameters. Voor deze opdrachten worden de parameters weergegeven als tekstvelden, zodat u de invoerwaarden kunt opgeven. Voor elke opdracht kunt u het script weergeven dat wordt uitgevoerd door Script weergeven uit te vouwen. RunPowerShellScript verschilt van de andere opdrachten, omdat u hiermee uw eigen aangepaste script kunt opgeven.

Notitie

De ingebouwde opdrachten kunnen niet worden bewerkt.

Nadat u de opdracht hebt gekozen, selecteert u Uitvoeren om het script uit te voeren. Nadat het script is voltooid, worden de uitvoer en eventuele fouten in het uitvoervenster geretourneerd. In de volgende schermopname ziet u een voorbeeld van uitvoer van het uitvoeren van de opdracht RDPSettings .

Uitvoer van opdrachtscript uitvoeren

PowerShell

In het volgende voorbeeld wordt de cmdlet Invoke-AzVMRunCommand gebruikt om een PowerShell-script uit te voeren op een Azure-VM. De cmdlet verwacht dat het script waarnaar wordt verwezen in de -ScriptPath parameter lokaal is naar waar de cmdlet wordt uitgevoerd.

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

Notitie

Parameterwaarden kunnen alleen van het tekenreekstype zijn en het script is verantwoordelijk voor het converteren ervan naar andere typen, indien nodig.

Toegang tot Opdracht uitvoeren beperken

Voor het weergeven van de uitvoeringsopdrachten of het weergeven van de details van een opdracht is de Microsoft.Compute/locations/runCommands/read machtiging op abonnementsniveau vereist. De ingebouwde rol Lezer en hogere niveaus hebben deze machtiging.

Voor het uitvoeren van een opdracht is de Microsoft.Compute/virtualMachines/runCommands/write machtiging vereist. De rol Inzender voor virtuele machines en hogere niveaus hebben deze machtiging.

U kunt een van de ingebouwde rollen gebruiken of een aangepaste rol maken om opdracht uitvoeren te gebruiken.

Windows-problemen met actie-run-opdracht oplossen

Bij het oplossen van problemen met de opdracht Actie uitvoeren voor Windows-omgevingen, raadpleegt u het logboekbestand RunCommandExtension dat zich meestal in de volgende map bevindt: C:\WindowsAzure\Logs\Plugins\Microsoft.CPlat.Core.RunCommandWindows\<version>\RunCommandExtension.log voor meer informatie.

Bekende problemen

De opdrachtextensie Action Run kan mogelijk niet worden uitgevoerd in uw Windows-omgeving als de opdracht gereserveerde tekens bevat. Bijvoorbeeld:

Als het & symbool wordt doorgegeven in de parameter van uw opdracht, zoals het onderstaande PowerShell-script, kan het mislukken.

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

Gebruik het ^ teken om de & in het argument te laten ontsnappen, zoals $paramm='abc^&jj'

De extensie Opdracht uitvoeren kan ook niet worden uitgevoerd als de uit te voeren opdracht '\n' bevat in het pad, omdat deze wordt behandeld als een nieuwe regel. Bevat bijvoorbeeld C:\Windows\notepad.exe de \n in het bestandspad. Overweeg om te \n\N vervangen door in uw pad.

Opdracht voor actie uitvoeren verwijderen

Als u de Windows-extensie voor de actie-uitvoeringsopdracht wilt verwijderen, raadpleegt u de onderstaande stappen voor Azure PowerShell en CLI:

Vervang rgname en vmname door de relevante resourcegroepnaam en de naam van de virtuele machine in de volgende verwijderingsvoorbeelden.

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

Notitie

Wanneer u een opdracht uitvoeren opnieuw toepast, wordt de extensie automatisch geïnstalleerd. U kunt de opdracht voor het verwijderen van de extensie gebruiken om eventuele problemen met betrekking tot de extensie op te lossen.

Volgende stappen

Zie Scripts uitvoeren op uw Windows-VM voor meer informatie over andere manieren om scripts en opdrachten extern uit te voeren in uw VM.