Executar scripts na VM Windows com os Comandos Executar de ação
O recurso Executar Comando usa o agente de máquina virtual (VM) para executar scripts do PowerShell em uma VM do Windows do Azure. Pode utilizar estes scripts para a gestão geral de computadores ou aplicações. Eles podem ajudá-lo a diagnosticar e corrigir rapidamente o acesso à VM e problemas de rede e fazer com que a VM volte a um bom estado.
Benefícios
Você pode acessar suas máquinas virtuais de várias maneiras. Executar comando pode executar scripts em suas máquinas virtuais remotamente usando o agente de VM. Você usa Executar Comando por meio do portal do Azure, API REST ou PowerShell para VMs do Windows.
Esse recurso é útil em todos os cenários em que você deseja executar um script em uma máquina virtual. É uma das únicas maneiras de solucionar problemas e corrigir uma máquina virtual que não tem a porta RDP ou SSH aberta devido à configuração incorreta do usuário administrativo ou de rede.
Pré-requisitos
Sistemas operacionais Windows suportados
SO Windows | x64 |
---|---|
Windows 10 | Suportado |
Windows 11 | Suportado |
Windows Server 2008 SP2 | Suportado |
Windows Server 2008 R2 | Suportado |
Windows Server 2012 | Suportado |
Windows Server 2012 R2 | Suportado |
Windows Server 2016 | Suportado |
Núcleo do Windows Server 2016 | Suportado |
Windows Server 2019 | Suportado |
Núcleo do Windows Server 2019 | Suportado |
Windows Server 2022 | Suportado |
Núcleo do Windows Server 2022 | Suportado |
Restrições
Aplicam-se as seguintes restrições quando utiliza o Comando Executar:
- A saída está limitada aos últimos 4096 bytes.
- O tempo mínimo para executar um script é cerca de 20 segundos.
- Os scripts funcionam como Sistema no Windows.
- Pode ser executado um script de cada vez.
- Não há suporte para scripts que solicitam informações (modo interativo).
- Não pode cancelar um script em execução.
- O tempo máximo que um script pode ser executado é de 90 minutos. Depois disso, excede o limite de tempo.
- A conectividade de saída da VM é necessária para devolver os resultados do script.
- Não é recomendado executar um script que causará uma parada ou atualização do Agente de VM. Tal pode colocar a extensão num estado de Transição, o que causa um tempo limite.
Nota
Para funcionar corretamente, o Run Command requer conectividade (porta 443) com endereços IP públicos do Azure. Se a extensão não tiver acesso a esses pontos de extremidade, os scripts poderão ser executados com êxito, mas não retornarão os resultados. Se estiver a bloquear o tráfego na máquina virtual, pode utilizar etiquetas de serviço para permitir o tráfego para endereços IP públicos do Azure utilizando a AzureCloud
etiqueta.
O recurso Executar comando não funcionará se o status do agente da VM NÃO estiver PRONTO. Verifique o status do agente nas propriedades da VM no portal do Azure.
Comandos disponíveis
Esta tabela mostra a lista de comandos disponíveis para VMs do Windows. Você pode usar o comando RunPowerShellScript para executar qualquer script personalizado desejado. Quando você estiver usando a CLI do Azure ou o PowerShell para executar um comando, o valor fornecido para o --command-id
parâmetro or -CommandId
deve ser um dos seguintes valores listados. Quando você especifica um valor que não é um comando disponível, você recebe este erro:
The entity was not found in this Azure location
Name | Descrição |
---|---|
RunPowerShellScript | Executa um script do PowerShell |
DesativarNLA | Desativar a autenticação no nível de rede |
DesativarWindowsUpdate | Desativar as Atualizações Automáticas do Windows Update |
EnableAdminAccount | Verifica se a conta de administrador local está desativada e, em caso afirmativo, se a habilita. |
HabilitarEMS | Habilita EMS |
EnableRemotePS | Configura a máquina para habilitar o PowerShell remoto. |
EnableWindowsUpdate | Ativar as Atualizações Automáticas do Windows Update |
IPConfig | Mostra informações detalhadas para o endereço IP, máscara de sub-rede e gateway padrão para cada adaptador vinculado ao TCP/IP. |
RDPSettings | Verifica as configurações do Registro e as configurações da diretiva de domínio. Sugere ações de política se a máquina fizer parte de um domínio ou modificar as configurações para valores padrão. |
ResetRDPCert | Remove o certificado TLS/SSL vinculado ao ouvinte RDP e restaura a segurança do ouvinte RDP para padrão. Use este script se vir algum problema com o certificado. |
SetRDPPort | Define o número de porta padrão ou especificado pelo usuário para conexões de Área de Trabalho Remota. Habilita regras de firewall para acesso de entrada à porta. |
CLI do Azure
Nota
Dependendo de qual modalidade é usada para executar, algumas fugas podem ser necessárias. Por exemplo, se você estiver executando o comando em uma sessão do PowerShell, o caminho para o arquivo de script precisará ter aspas.
O exemplo a seguir usa o comando az vm run-command para executar um shell script em uma VM do Windows Azure.
# 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"
Portal do Azure
Vá para uma VM no portal do Azure e selecione Executar comando no menu à esquerda, em Operações. Você verá uma lista dos comandos disponíveis para serem executados na VM.
Escolha um comando para executar. Alguns dos comandos podem ter parâmetros de entrada opcionais ou necessários. Para esses comandos, os parâmetros são apresentados como campos de texto para você fornecer os valores de entrada. Para cada comando, você pode exibir o script que está sendo executado expandindo View script. RunPowerShellScript é diferente dos outros comandos, porque permite que você forneça seu próprio script personalizado.
Nota
Os comandos internos não são editáveis.
Depois de escolher o comando, selecione Executar para executar o script. Depois que o script termina, ele retorna a saída e quaisquer erros na janela de saída. A captura de tela a seguir mostra um exemplo de saída da execução do comando RDPSettings .
PowerShell
O exemplo a seguir usa o cmdlet Invoke-AzVMRunCommand para executar um script do PowerShell em uma VM do Azure. O cmdlet espera que o script referenciado -ScriptPath
no parâmetro seja local para onde o cmdlet está sendo executado.
Invoke-AzVMRunCommand -ResourceGroupName '<myResourceGroup>' -Name '<myVMName>' -CommandId 'RunPowerShellScript' -ScriptPath '<pathToScript>' -Parameter @{"arg1" = "var1";"arg2" = "var2"}
Nota
Os valores de parâmetro podem ser apenas do tipo string e o script é responsável por convertê-los em outros tipos, se necessário.
Limitar o acesso ao Comando Executar
Listar os comandos de execução ou mostrar os detalhes de um comando requer a Microsoft.Compute/locations/runCommands/read
permissão no Nível de Assinatura. A função de leitor interna e os níveis superiores têm essa permissão.
A execução de um comando requer a Microsoft.Compute/virtualMachines/runCommands/action
permissão. A função de Colaborador de Máquina Virtual e os níveis superiores têm essa permissão.
Você pode usar uma das funções internas ou criar uma função personalizada para usar o Comando Executar.
Solução de problemas do Action Run Command Windows
Ao solucionar o comando run action para ambientes Windows, consulte o arquivo de log RunCommandExtension normalmente localizado no seguinte diretório: C:\WindowsAzure\Logs\Plugins\Microsoft.CPlat.Core.RunCommandWindows\<version>\RunCommandExtension.log
para obter mais detalhes.
Problemas conhecidos
A extensão Action Run Command pode falhar ao ser executada no ambiente Windows se o comando contiver caracteres reservados. Por exemplo:
Se o
&
símbolo for passado no parâmetro do comando, como o script PowerShell abaixo, ele poderá falhar.$paramm='abc&jj' Invoke-AzVMRunCommand -ResourceGroupName AzureCloudService1 -Name test -CommandId 'RunPowerShellScript' -ScriptPath C:\data\228332902\PostAppConfig.ps1 -Parameter @{"Prefix" = $paramm}
Use o
^
caractere para escapar do&
no argumento, como$paramm='abc^&jj'
A extensão Executar Comando também pode falhar na execução se o comando a ser executado contiver "\n" no caminho, pois será tratado como uma nova linha. Por exemplo,
C:\Windows\notepad.exe
contém o\n
no caminho do arquivo. Considere substituir\n
por\N
no seu caminho.Certifique-se de que não tem qualquer definição personalizada na chave
HKLM\SOFTWARE\Microsoft\Command Processor\AutoRun
de registo (detalhada aqui). Isso pode ser acionado durante as fases de instalação ou habilitação da extensão RunCommand e causar um erro como "XYZ não é reconhecido como um comando interno ou externo, programa operável ou arquivo em lotes".
Ação Executar Remoção de Comando
Se precisar remover a extensão do comando action run do Windows, consulte as etapas abaixo para o Azure PowerShell e a CLI:
Substitua rgname e vmname pelo nome do grupo de recursos relevante e pelo nome da máquina virtual nos exemplos de remoção a seguir.
Invoke-AzVMRunCommand -ResourceGroupName 'rgname' -VMName 'vmname' -CommandId 'RemoveRunCommandWindowsExtension'
az vm run-command invoke --command-id RemoveRunCommandWindowsExtension --name vmname -g rgname
Nota
Quando você aplica um Run Command novamente, a extensão será instalada automaticamente. Você pode usar o comando extension removal para solucionar quaisquer problemas relacionados à extensão.
Próximos passos
Para saber mais sobre outras maneiras de executar scripts e comandos remotamente em sua VM, consulte Executar scripts em sua VM do Windows.