Partilhar via


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

Suportado pelo sistema operacional Windows

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

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.

Lista de comandos

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 .

Executar saída de script de comando

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.