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
Ondersteunde Windows-besturingssystemen
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
Notitie
Afhankelijk van welke modaliteit wordt gebruikt om uit te voeren, zijn er mogelijk escape-bewerkingen nodig. Als u bijvoorbeeld de opdracht uitvoert in een PowerShell-sessie, moet het pad naar het scriptbestand aanhalingstekens bevatten.
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.
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 .
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.Zorg ervoor dat u geen aangepaste instelling in de registersleutel
HKLM\SOFTWARE\Microsoft\Command Processor\AutoRun
hebt (hier wordt beschreven). Dit kan worden geactiveerd tijdens de installatie van de RunCommand-extensie of het inschakelen van fasen en een fout veroorzaken zoals 'XYZ wordt niet herkend als een interne of externe opdracht, beveiligbaar programma of batchbestand'.
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.