Share via


Executar scripts na VM Windows com os Comandos Executar de ação

A funcionalidade Executar Comando utiliza o agente da máquina virtual (VM) para executar scripts do PowerShell numa VM do Windows do Azure. Pode utilizar estes scripts para a gestão geral de computadores ou aplicações. Podem ajudá-lo a diagnosticar e remediar rapidamente problemas de rede e acesso à VM e fazer com que a VM volte a ter um bom estado.

Benefícios

Pode aceder às suas máquinas virtuais de várias formas. O Comando Executar pode executar scripts nas suas máquinas virtuais remotamente com o agente da VM. Utilize Executar Comando através da portal do Azure, da API REST ou do PowerShell para VMs do Windows.

Esta capacidade é útil em todos os cenários em que pretende executar um script numa máquina virtual. É uma das únicas formas de resolver e remediar uma máquina virtual que não tem a porta RDP ou SSH aberta devido a uma configuração de rede ou utilizador administrativo incorreta.

Pré-requisitos

Suportado pelo SO 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
Windows Server 2016 Core Suportado
Windows Server 2019 Suportado
Windows Server 2019 Core Suportado
Windows Server 2022 Suportado
Windows Server 2022 Core 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.
  • Os scripts que pedem informações (modo interativo) não são suportados.
  • 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 cause uma paragem ou atualização do Agente da VM. Tal pode colocar a extensão num estado de Transição, o que causa um tempo limite.

Nota

Para funcionar corretamente, o Comando Executar requer conectividade (porta 443) para endereços IP públicos do Azure. Se a extensão não tiver acesso a estes pontos finais, os scripts poderão ser executados com êxito, mas não devolver 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 com a AzureCloud etiqueta.

A funcionalidade Executar Comando não funciona se o estado do agente da VM não estiver PRONTO. Verifique o estado 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. Pode utilizar o comando RunPowerShellScript para executar qualquer script personalizado pretendido. Quando estiver a utilizar a CLI do Azure ou o PowerShell para executar um comando, o valor que fornecer para o --command-id parâmetro ou -CommandId tem de ser um dos seguintes valores listados. Quando especifica um valor que não é um comando disponível, recebe este erro:

The entity was not found in this Azure location

Nome Descrição
RunPowerShellScript Executa um script do PowerShell
DesativarNLA Desativar a Autenticação ao Nível da Rede
DesativarWindowsUpdate Desativar Windows Update Atualizações Automático
EnableAdminAccount Verifica se a conta de administrador local está desativada e, se assim for, ativa-a.
EnableEMS Ativa o EMS
EnableRemotePS Configura o computador para ativar o PowerShell remoto.
EnableWindowsUpdate Ativar Windows Update Atualizações Automática
IPConfig Mostra informações detalhadas sobre o endereço IP, a máscara de sub-rede e o gateway predefinido para cada adaptador vinculado a TCP/IP.
RDPSettings Verifica as definições de registo e as definições de política de domínio. Sugere ações de política se o computador fizer parte de um domínio ou modificar as definições para valores predefinidos.
ResetRDPCert Remove o certificado TLS/SSL associado ao serviço de escuta RDP e restaura a segurança do serviço de escuta RDP para predefinição. Utilize este script se vir problemas com o certificado.
SetRDPPort Define o número de porta predefinido ou especificado pelo utilizador para ligações de Ambiente de Trabalho Remoto. Ativa regras de firewall para acesso de entrada à porta.

CLI do Azure

O exemplo seguinte utiliza o comando az vm run-command para executar um script de shell numa VM do Windows do 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

Aceda a uma VM no portal do Azure e selecione Executar comando no menu esquerdo, em Operações. Verá uma lista dos comandos disponíveis a executar na VM.

Lista de comandos

Escolha um comando a 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 fornecer os valores de entrada. Para cada comando, pode ver o script que está a ser executado ao expandir Ver script. RunPowerShellScript é diferente dos outros comandos, uma vez que lhe permite fornecer o seu próprio script personalizado.

Nota

Os comandos incorporados não são editáveis.

Depois de escolher o comando, selecione Executar para executar o script. Após a conclusão do script, devolve o resultado e quaisquer erros na janela de saída. A seguinte captura de ecrã mostra um resultado de exemplo da execução do comando RDPSettings .

Executar saída do script de comandos

PowerShell

O exemplo seguinte utiliza o cmdlet Invoke-AzVMRunCommand para executar um script do PowerShell numa VM do Azure. O cmdlet espera que o script referenciado no -ScriptPath parâmetro seja local para o local onde o cmdlet está a ser executado.

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

Nota

Os valores dos parâmetros só podem ser do tipo de cadeia e o script é responsável por convertê-los noutros 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 permissão ao Nível da Microsoft.Compute/locations/runCommands/read Subscrição. A função leitor incorporada e os níveis superiores têm esta permissão.

A execução de um comando requer a Microsoft.Compute/virtualMachines/runCommands/write permissão. A função Contribuidor de Máquina Virtual e os níveis superiores têm esta permissão.

Pode utilizar uma das funções incorporadas ou criar uma função personalizada para utilizar o Comando Executar.

Resolução de problemas do Comando Executar Ação do Windows

Ao resolver problemas com o comando de execução de ações para ambientes windows, consulte o ficheiro de registo RunCommandExtension normalmente localizado no seguinte diretório: C:\WindowsAzure\Logs\Plugins\Microsoft.CPlat.Core.RunCommandWindows\<version>\RunCommandExtension.log para obter mais detalhes.

Problemas conhecidos

Se o comando contiver carateres reservados, a Extensão de Comando executar a Ação poderá não ser executada no seu ambiente do Windows. Por exemplo:

Se o & símbolo for transmitido no parâmetro do comando, como o script do PowerShell abaixo, poderá falhar.

$paramm='abc&jj'
Invoke-AzVMRunCommand -ResourceGroupName AzureCloudService1 -Name test -CommandId 'RunPowerShellScript' -ScriptPath C:\data\228332902\PostAppConfig.ps1 -Parameter @{"Prefix" = $paramm}

Utilize o ^ caráter para escapar ao & no argumento, como $paramm='abc^&jj'

A extensão Executar Comando também poderá não ser executada se o comando a ser executado contiver "\n" no caminho, uma vez que será tratado como uma nova linha. Por exemplo, C:\Windows\notepad.exe contém o \n no caminho do ficheiro. Considere substituir por \n\N no seu caminho.

Remoção de Comandos da Execução de Ação

Se precisar de remover o comando de execução de ação da extensão do Windows, veja os passos abaixo para Azure PowerShell e CLI:

Substitua rgname e vmname pelo nome do grupo de recursos relevante e pelo nome da máquina virtual nos seguintes exemplos de remoção.

 Invoke-AzVMRunCommand -ResourceGroupName 'rgname' -VMName 'vmname' -CommandId 'RemoveRunCommandWindowsExtension'
az vm run-command invoke  --command-id RemoveRunCommandWindowsExtension --name vmname -g rgname

Nota

Quando aplicar novamente um Comando Executar, a extensão será instalada automaticamente. Pode utilizar o comando de remoção da extensão para resolver quaisquer problemas relacionados com a extensão.

Passos seguintes

Para saber mais sobre outras formas de executar scripts e comandos remotamente na sua VM, veja Executar scripts na VM do Windows.