Share via


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 netwerkproblemen vast te stellen en op te lossen en de VIRTUELE machine weer in een goede staat te krijgen.

Vergoedingen

U hebt op meerdere manieren toegang tot uw virtuele machines. Voer opdracht uit om scripts op uw virtuele machines op afstand uit te voeren met behulp van de VM-agent. U gebruikt De 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 wilt uitvoeren binnen een virtuele machine. Het is een van de enige manieren om problemen op te lossen met een virtuele machine waarop de RDP- of SSH-poort niet is geopend vanwege een onjuiste configuratie van netwerk- of beheerdersgebruikers.

Vereisten

Ondersteund Windows-besturingssysteem

Windows-besturingssysteem 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 is niet raadzaam om een script uit te voeren waardoor de VM-agent wordt gestopt of bijgewerkt. De extensie kan hierdoor de status Overgang krijgen, wat kan leiden tot een time-out.

Notitie

Om correct te kunnen functioneren, vereist De opdracht Uitvoeren vereist connectiviteit (poort 443) naar openbare IP-adressen van Azure. 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 agentstatus in de eigenschappen van de VM in Azure Portal.

Beschikbare opdrachten

In deze tabel ziet u de lijst met opdrachten die beschikbaar zijn voor Windows-VM's. U kunt de opdracht RunPowerShellScript gebruiken om een 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 of -CommandId parameter een van de volgende vermelde waarden zijn. Wanneer u een waarde opgeeft die geen beschikbare opdracht is, wordt deze fout weergegeven:

The entity was not found in this Azure location

Naam Beschrijving
RunPowerShellScript Een PowerShell-script uitvoeren
DisableNLA Verificatie op netwerkniveau uitschakelen
DisableWindowsUpdate Automatische updates voor Windows Update uitschakelen
EnableAdminAccount Hiermee wordt gecontroleerd of het lokale beheerdersaccount is uitgeschakeld en of dit is ingeschakeld.
EnableEMS EMS inschakelen
EnableRemotePS Hiermee configureert u de computer om externe PowerShell in te schakelen.
EnableWindowsUpdate Automatische updates voor 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 Controleert registerinstellingen en domeinbeleidsinstellingen. Hiermee worden beleidsacties voorgesteld als de machine 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 Azure Portal en selecteer opdracht Uitvoeren in het linkermenu onder Bewerkingen. U ziet een lijst met de beschikbare opdrachten die op de VIRTUELE machine moeten worden uitgevoerd.

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 om de invoerwaarden op te geven. Voor elke opdracht kunt u het script weergeven dat wordt uitgevoerd door het weergavescript 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 RDPSettings-opdracht .

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 voor de locatie waarop de cmdlet wordt uitgevoerd.

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

Notitie

Parameterwaarden kunnen alleen 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 lezerrol en hogere niveaus hebben deze machtiging.

Voor het uitvoeren van een opdracht is de Microsoft.Compute/virtualMachines/runCommands/action 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 de opdracht Uitvoeren te gebruiken.

Windows-probleemoplossing voor opdracht Uitvoeren van actie

Raadpleeg het logboekbestand Run Run run van RunCommandExtension meestal in de volgende map als u problemen met de actieuitvoering voor Windows-omgevingen wilt oplossen: C:\WindowsAzure\Logs\Plugins\Microsoft.CPlat.Core.RunCommandWindows\<version>\RunCommandExtension.log voor meer informatie.

Bekende problemen

De opdrachtextensie Voor het uitvoeren van acties kan mogelijk niet worden uitgevoerd in uw Windows-omgeving als de opdracht gereserveerde tekens bevat. Voorbeeld:

Als het & symbool wordt doorgegeven in de parameter van uw opdracht, zoals het onderstaande PowerShell-script, kan dit 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 het in het argument te escapen & , zoals $paramm='abc^&jj'

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

Opdracht Actie uitvoeren verwijderen

Raadpleeg de onderstaande stappen voor Azure PowerShell en CLI als u de windows-extensie voor het uitvoeren van acties wilt verwijderen:

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 extensies 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 op afstand uit te voeren op uw virtuele machine.