Spouštění skriptů ve virtuálním počítači s Windows pomocí akčních funkcí Spustit příkaz
Funkce Spustit příkaz používá agenta virtuálního počítače ke spouštění skriptů PowerShellu na virtuálním počítači Azure s Windows. Tyto skripty můžete použít k obecné správě počítačů nebo aplikací. Můžou vám pomoct rychle diagnostikovat a napravit problémy s přístupem k virtuálním počítačům a sítí a obnovit virtuální počítač do správného stavu.
Výhody
K virtuálním počítačům můžete přistupovat několika způsoby. Příkaz Spustit příkaz může vzdáleně spouštět skripty na virtuálních počítačích pomocí agenta virtuálního počítače. Příkaz Spustit příkaz používáte prostřednictvím Azure Portal, rozhraní REST API nebo PowerShellu pro virtuální počítače s Windows.
Tato funkce je užitečná ve všech scénářích, kdy chcete spustit skript na virtuálním počítači. Je to jeden z jediných způsobů, jak řešit potíže a opravit virtuální počítač, na kterém není otevřený port RDP nebo SSH kvůli nesprávné konfiguraci sítě nebo uživatele pro správu.
Požadavky
Podporovaný operační systém Windows
Operační systém Windows | x64 |
---|---|
Windows 10 | Podporováno |
Windows 11 | Podporuje se |
Windows Server 2008 SP2 | Podporováno |
Windows Server 2008 R2 | Podporováno |
Windows Server 2012 | Podporováno |
Windows Server 2012 R2 | Podporováno |
Windows Server 2016 | Podporováno |
Windows Server 2016 Core | Podporuje se |
Windows Server 2019 | Podporuje se |
Windows Server 2019 Core | Podporuje se |
Windows Server 2022 | Podporuje se |
Windows Server 2022 Core | Podporuje se |
Omezení
Při používání funkce Spustit příkaz platí následující omezení:
- Výstup je omezený na posledních 4 096 bajtů.
- Minimální doba potřebná ke spuštění skriptu je přibližně 20 sekund.
- Skripty se ve Windows spouštějí pod systémovým účtem.
- Najednou může být spuštěný pouze jeden skript.
- Skripty, které vyzvou k zadání informací (interaktivní režim), se nepodporují.
- Spuštěný skript není možné zrušit.
- Maximální doba spuštění skriptu je 90 minut. Po uplynutí této doby dojde k vypršení časového limitu skriptu.
- Pro vrácení výsledků skriptu se vyžaduje odchozí připojení z virtuálního počítače.
- Nedoporučuje se spouštět skript, který způsobí zastavení nebo aktualizaci agenta virtuálního počítače. Rozšíření pak může zůstat v přechodném stavu, což může způsobit vypršení časového limitu.
Poznámka
Aby funkce Spustit příkaz fungovala správně, vyžaduje připojení (port 443) k veřejným IP adresě Azure. Pokud rozšíření nemá přístup k těmto koncovým bodům, skripty se můžou úspěšně spustit, ale nevrátí výsledky. Pokud blokujete provoz na virtuálním počítači, můžete pomocí značek služeb povolit provoz na veřejné IP adresy Azure pomocí značky .AzureCloud
Funkce Spustit příkaz nefunguje, pokud je stav agenta virtuálního počítače NEPŘIPRAVENÝ. Zkontrolujte stav agenta ve vlastnostech virtuálního počítače v Azure Portal.
Dostupné příkazy
Tato tabulka obsahuje seznam příkazů dostupných pro virtuální počítače s Windows. Ke spuštění libovolného vlastního skriptu můžete použít příkaz RunPowerShellScript . Pokud ke spuštění příkazu používáte Azure CLI nebo PowerShell, hodnota, kterou zadáte pro --command-id
parametr nebo -CommandId
, musí být jedna z následujících uvedených hodnot. Když zadáte hodnotu, která není dostupným příkazem, zobrazí se tato chyba:
The entity was not found in this Azure location
Název | Popis |
---|---|
SpustitPowerShellScript | Spustí powershellový skript. |
DisableNLA | Zakázat ověřování na úrovni sítě |
DisableWindowsUpdate | Zakázat automatické služba Windows Update Aktualizace |
EnableAdminAccount | Zkontroluje, jestli je účet místního správce zakázaný, a pokud ano, povolí ho. |
Povolit EMS | Povolení EMS |
EnableRemotePS | Nakonfiguruje počítač tak, aby povoll vzdálený PowerShell. |
EnableWindowsUpdate | Povolení automatického Aktualizace služba Windows Update |
Ipconfig | Zobrazuje podrobné informace o IP adrese, masce podsítě a výchozí bráně pro každý adaptér svázaný s protokolem TCP/IP. |
Nastavení RDP | Zkontroluje nastavení registru a nastavení zásad domény. Navrhne akce zásad, pokud je počítač součástí domény, nebo upraví nastavení na výchozí hodnoty. |
ResetRDPCert | Odebere certifikát TLS/SSL spojený s naslouchacím procesem RDP a obnoví výchozí zabezpečení naslouchacího procesu RDP. Tento skript použijte, pokud dojde k problémům s certifikátem. |
SetRDPPort | Nastaví výchozí nebo uživatelem zadané číslo portu pro připojení ke vzdálené ploše. Povolí pravidla brány firewall pro příchozí přístup k portu. |
Azure CLI
Následující příklad používá příkaz az vm run-command ke spuštění skriptu prostředí na virtuálním počítači Azure s Windows.
# 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"
portál Azure
V Azure Portal přejděte na virtuální počítač a v nabídce vlevo v části Operace vyberte Spustit příkaz. Zobrazí se seznam dostupných příkazů ke spuštění na virtuálním počítači.
Zvolte příkaz, který chcete spustit. Některé příkazy můžou mít volitelné nebo povinné vstupní parametry. U těchto příkazů jsou parametry prezentovány jako textová pole, abyste mohli zadat vstupní hodnoty. Pro každý příkaz můžete zobrazit skript, který se spouští, rozbalením zobrazit skript. RunPowerShellScript se liší od ostatních příkazů, protože umožňuje zadat vlastní skript.
Poznámka
Předdefinované příkazy nelze upravovat.
Po zvolení příkazu vyberte Spustit a spusťte skript. Po dokončení skriptu se vrátí výstup a případné chyby v okně výstupu. Následující snímek obrazovky ukazuje příklad výstupu ze spuštění příkazu RDPSettings .
PowerShell
Následující příklad používá rutinu Invoke-AzVMRunCommand ke spuštění skriptu PowerShellu na virtuálním počítači Azure. Rutina očekává, že skript odkazovaný v parametru -ScriptPath
bude místní na místo, kde se rutina spouští.
Invoke-AzVMRunCommand -ResourceGroupName '<myResourceGroup>' -Name '<myVMName>' -CommandId 'RunPowerShellScript' -ScriptPath '<pathToScript>' -Parameter @{"arg1" = "var1";"arg2" = "var2"}
Poznámka
Hodnoty parametrů můžou být pouze typu řetězec a skript zodpovídá za jejich převod na jiné typy v případě potřeby.
Omezení přístupu k funkci Spustit příkaz
Výpis příkazů spuštění nebo zobrazení podrobností příkazu vyžaduje Microsoft.Compute/locations/runCommands/read
oprávnění na úrovni předplatného. Toto oprávnění mají předdefinované role Čtenář a vyšší úrovně.
Spuštění příkazu vyžaduje oprávnění Microsoft.Compute/virtualMachines/runCommands/write
. Toto oprávnění mají role Přispěvatel virtuálních počítačů a vyšší úrovně.
Můžete použít některou z předdefinovaných rolí nebo vytvořit vlastní roli pro použití příkazu Spustit příkaz.
Řešení potíží se spuštěním příkazu akce ve Windows
Při řešení potíží s příkazem spuštění akce pro prostředí Windows najdete další podrobnosti v souboru protokolu RunCommandExtension, který se obvykle nachází v následujícím adresáři: C:\WindowsAzure\Logs\Plugins\Microsoft.CPlat.Core.RunCommandWindows\<version>\RunCommandExtension.log
Známé problémy
Pokud příkaz obsahuje vyhrazené znaky, může se rozšíření příkazu Spustit akci ve vašem prostředí Windows nepovede. Příklad:
&
Pokud je symbol předán v parametru vašeho příkazu, jako je například následující skript PowerShellu, může dojít k selhání.
$paramm='abc&jj'
Invoke-AzVMRunCommand -ResourceGroupName AzureCloudService1 -Name test -CommandId 'RunPowerShellScript' -ScriptPath C:\data\228332902\PostAppConfig.ps1 -Parameter @{"Prefix" = $paramm}
Znak použijte ^
k řídicímu znaku &
v argumentu, například $paramm='abc^&jj'
Spuštění rozšíření Spustit příkaz může také selhat, pokud příkaz, který se má spustit, obsahuje v cestě "\n", protože bude považován za nový řádek. Například C:\Windows\notepad.exe
obsahuje hodnotu \n
v cestě k souboru. Zvažte nahrazení \n
za \N
v cestě.
Odebrání příkazu spuštění akce
Pokud potřebujete odebrat rozšíření Windows pro spuštění akce, projděte si následující postup pro Azure PowerShell a rozhraní příkazového řádku:
V následujících příkladech odebrání nahraďte rgname a vmname názvem příslušné skupiny prostředků a názvem virtuálního počítače.
Invoke-AzVMRunCommand -ResourceGroupName 'rgname' -VMName 'vmname' -CommandId 'RemoveRunCommandWindowsExtension'
az vm run-command invoke --command-id RemoveRunCommandWindowsExtension --name vmname -g rgname
Poznámka
Když znovu použijete příkaz Spustit, rozšíření se nainstaluje automaticky. K řešení problémů souvisejících s rozšířením můžete použít příkaz pro odebrání rozšíření.
Další kroky
Další informace o dalších způsobech vzdáleného spouštění skriptů a příkazů na virtuálním počítači najdete v tématu Spouštění skriptů na virtuálním počítači s Windows.
Váš názor
https://aka.ms/ContentUserFeedback.
Připravujeme: V průběhu roku 2024 budeme postupně vyřazovat problémy z GitHub coby mechanismus zpětné vazby pro obsah a nahrazovat ho novým systémem zpětné vazby. Další informace naleznete v tématu:Odeslat a zobrazit názory pro