Compartilhar via


Executar scripts na sua VM do Windows usando Comandos de Execução gerenciados

Aplica-se a: ✔️ VMs do Windows ✔️ Conjuntos de dimensionamento flexíveis

O recurso Executar comando usa o agente de máquina virtual (VM) para executar scripts em uma VM do Windows do Azure. Use esses scripts para o gerenciamento geral de máquinas ou aplicativos. Eles podem ajudá-lo a diagnosticar e corrigir rapidamente problemas de rede e acesso à VM e colocar a VM em um bom estado.

O comando Executar gerenciado atualizado usa o mesmo canal do agente de VM para executar scripts e oferece os seguintes aprimoramentos em relação ao Comando Executar orientado a ações original:

  • Suporte para Executar Comando atualizado por meio do modelo de implantação do ARM
  • Execução paralela de vários scripts
  • Execução sequencial de scripts
  • Tempo limite de script especificado pelo usuário
  • Suporte para scripts de execução prolongada (horas/dias)
  • Passando segredos (parâmetros, senhas) de maneira segura

Importante

No momento, o Comando de Execução Gerenciada está disponível na CLI do Azure, no PowerShell e na API.

Pré-requisitos

Sistemas Operacionais Windows com Suporte

Versão do SO x64 ARM64
Windows 10 Com suporte Com suporte
Windows 11 Com suporte Com suporte
Windows Server 2016 Com suporte Com suporte
Windows Server 2016 Core Com suporte Com suporte
Windows Server 2019 Com suporte Com suporte
Windows Server 2019 Core Com suporte Com suporte
Windows Server 2022 Com suporte Com suporte
Windows Server 2022 Core Com suporte Com suporte
Windows Server 2022 Azure Edition Com suporte Com suporte
Windows Server 2025 Com suporte Com suporte
Windows Server 2025 Core Com suporte Com suporte
Windows Server 2025 Azure Edition Com suporte Com suporte

Comandos disponíveis

CommandID Descrição Mais informações:
RunPowerShellScript Executa um script do PowerShell
DisableNLA Desabilita NLA (Autenticação no Nível da Rede). Você deve reiniciar a VM após a conclusão do script para que a alteração entre em vigor. O script em si não reinicia a VM. readme
DisableWindowsUpdate Desabilite atualizações automáticas por meio do Windows Update. readme
EnableAdminAccount Verifica se a conta de Administrador local está desabilitada e, se assim for, a habilita. readme
EnableEMS Habilite o EMS (Serviços de Gerenciamento de Emergência) para permitir a conexão de console serial em cenários de solução de problemas. readme
EnableRemotePS Ative o PowerShell remoto. readme
EnableWindowsUpdate Habilitar atualizações automáticas por meio do Windows Update. readme
IMDSCertCheck Verifica a integridade do IMDS e analisa os certificados atualmente instalados dos quais o IMDS depende. Se estiver ausente, mostrará detalhes adicionais e etapas de mitigação. readme
IPConfig Mostra informações detalhadas sobre o endereço IP, a máscara de sub-rede e o gateway padrão para cada adaptador associado ao TCP/IP. Para uso, consulte Executar scripts readme
RDPSettings Verifica as configurações do registro e de política de domínio. Sugere ações de política se o computador faz parte de um domínio ou modifica as configurações para valores padrão. readme
ResetRDPCert Remove o certificado SSL vinculado ao ouvinte RDP e restaura a segurança do ouvinte RDP como padrão. Use este script se houver algum problema com o certificado. readme
SetRDPPort Define o número de porta padrão ou especificado pelo usuário para conexões de Área de Trabalho Remota. Habilita a regra de firewall para acesso de entrada à porta. readme
WindowsActivationValidation Verifica o status atual da licença do Windows (ativado ou não) e o alerta será gerado se o computador não estiver ativado. readme
WindowsGhostedNicValidationScript Esse script verifica o registro do Windows em busca de adaptadores de rede em barramentos PCI e VMBUS, compara-os com adaptadores de rede atualmente ativos e identifica NICs fantasmas. Útil para solucionar problemas de rede ou limpar NICs antigas. readme
WindowsUpgradeAssessmentValidation Esse script foi projetado para avaliar a preparação de um computador Windows (cliente ou servidor) para uma atualização do sistema operacional in-loco, com considerações especiais para máquinas virtuais do Azure. Ele avalia a versão do sistema operacional, os caminhos de atualização com suporte, o espaço em disco do sistema e os recursos de segurança do Azure, como Inicialização Confiável, Inicialização Segura e vTPM. readme

Observação

As IDs de comando acima são aplicáveis aos Comandos de Execução Gerenciada para VMs do Windows. Você pode listar todos os commandIds usando o comando "Get-AzVMRunCommandDocument -Location {RegionName}".

Limitando o acesso ao recurso Executar Comando

Listar os comandos de execução ou mostrar os detalhes de um comando requer a permissão Microsoft.Compute/locations/runCommands/read no Nível de Assinatura. A função Leitor interna e os níveis superiores têm essa permissão.

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

Use uma das funções internas ou crie uma função personalizada para usar o recurso Executar Comando.

Usando comandos de execução

Executar um script com a VM

Esse comando fornece o script para a VM, o executa e retorna a saída capturada.

Set-AzVMRunCommand -ResourceGroupName "myRG" -VMName "myVM" -Location "EastUS" -RunCommandName "RunCommandName" –SourceScript "echo Hello World!"

Executar um script na VM usando o parâmetro SourceScriptUri

OutputBlobUri e ErrorBlobUri são parâmetros opcionais.

Set-AzVMRunCommand -ResourceGroupName "myRg" `
-VMName "myVM" `
-RunCommandName "RunCommandName" `
-SourceScriptUri “<SAS_URI_of_a_storage_blob_with_read_access_or_public_URI>" `
-OutputBlobUri “<SAS_URI_of_a_storage_append_blob_with_read_add_create_write_access>" `
-ErrorBlobUri “<SAS_URI_of_a_storage_append_blob_with_read_add_create_write_access>”

Executar um comando de execução prolongada em uma VM

O tempo de execução deve ser executado por mais tempo do que o tempo limite padrão de 90 minutos. Ele deve ser executado por 100 minutos (confira 6.0000 segundos – parâmetro TimeoutInSecond) desde que o script seja executado por esse tempo. Após 100 minutos, a execução do script deve parar.

Set-AzVMRunCommand -ResourceGroupName MyRG -VMName MyVM -RunCommandName MyRunCommand -Location EastUS2EUAP -SourceScriptUri <SourceScriptUri> -AsyncExecution -TimeoutInSecond 6000

Listar todos os recursos de RunCommand implantados em uma VM

Este comando retorna uma lista completa de comandos de execução implantados anteriormente com as respectivas propriedades.

Get-AzVMRunCommand -ResourceGroupName "myRG" -VMName "myVM"

Obter resultados e status da execução

Este comando recupera o progresso da execução atual, incluindo a saída mais recente, a hora de início/término, o código de saída e o estado terminal da execução.

Get-AzVMRunCommand -ResourceGroupName "myRG" -VMName "myVM" -RunCommandName "RunCommandName" -Expand InstanceView

Criar ou atualizar Executar Comando em uma VM usando SourceScriptUri (URL SAS do blob de armazenamento)

Crie ou atualize Executar Comando em uma VM do Windows usando uma URL SAS de um blob de armazenamento que contenha um script do PowerShell. SourceScriptUri pode ser a URL SAS completa ou a URL pública de um blob de armazenamento.

Set-AzVMRunCommand -ResourceGroupName MyRG0 -VMName MyVMEE -RunCommandName MyRunCommand -Location EastUS2EUAP -SourceScriptUri <SourceScriptUri>

Observação

A URL SAS deve fornecer acesso de leitura ao blob. Um tempo de expiração de 24 horas é sugerido para a URL SAS. As URLs SAS podem ser geradas no portal do Azure usando as opções do blob ou o token SAS usando New-AzStorageBlobSASToken. Se estiver gerando token SAS usando New-AzStorageBlobSASToken, a URL SAS = "URL de blob base" + "?" + "token SAS de New-AzStorageBlobSASToken"

Obter um modo de exibição de instância de Executar Comando para uma VM após criar ou atualizar Executar Comando

Obtenha um Executar Comando para VM com Exibição de Instância. A Exibição de Instância contém o estado de execução de Executar Comando (Sucesso, Com Falha etc.), código de saída, saída padrão e erro padrão gerados pela execução do script usando Executar Comando. Um ExitCode diferente de zero indica uma execução malsucedida.

$x = Get-AzVMRunCommand -ResourceGroupName MyRG -VMName MyVM -RunCommandName MyRunCommand -Expand InstanceView
$x.InstanceView

Saída de exemplo

ExecutionState   : Succeeded
ExecutionMessage :
ExitCode         : 0
Output           :   
output       : uid=0(root) gid=0(root) groups=0(root)
                   HelloWorld

Error            :
StartTime        : 10/27/2022 9:10:52 PM
EndTime          : 10/27/2022 9:10:55 PM
Statuses         :

InstanceView.ExecutionState: status do script Executar Comando do usuário. Consulte esse estado para saber se o script foi bem-sucedido ou não. ProvisioningState: status do provisionamento de extensão geral de ponta a ponta (indica se a plataforma de extensão pôde disparar o script de Executar Comando).

Criar ou atualizar Executar Comando em uma VM usando ScriptLocalPath (arquivo de script local)

Crie ou atualize Executar Comando em uma VM usando um arquivo de script local que está no computador cliente em que o cmdlet é executado.

Set-AzVMRunCommand -ResourceGroupName MyRG0 -VMName MyVMEE -RunCommandName MyRunCommand -Location EastUS2EUAP -ScriptLocalPath "C:\MyScriptsDir\MyScript.ps1"

Criar ou atualizar o comando de execução em uma máquina virtual usando SourceScript (texto de script)

Crie ou atualize um comando de execução em uma VM passando o conteúdo do script diretamente pelo parâmetro -SourceScript. Use ; para separar vários comandos

Set-AzVMRunCommand -ResourceGroupName MyRG0 -VMName MyVML -RunCommandName MyRunCommand2 -Location EastUS2EUAP -SourceScript "id; echo HelloWorld"

Criar ou atualizar um comando de execução em uma VM usando SourceCommandId

Crie ou atualize Executar Comando em uma VM usando o commandId preexistente. CommandIds disponíveis podem ser recuperadas usando Get-AzVMRunCommandDocument.

Set-AzVMRunCommand -ResourceGroupName MyRG0 -VMName MyVMEE -RunCommandName MyRunCommand -Location EastUS2EUAP -SourceCommandId DisableWindowsUpdate

Criar ou atualizar Executar Comando em uma VM usando OutputBlobUri, ErrorBlobUri para transmitir a saída padrão e as mensagens de erro padrão para blobs de acréscimo de saída e de erro

Crie ou atualize Executar Comando em uma VM e transmita a saída padrão e as mensagens de erro padrão para blobs de acréscimo de saída e de erro.

Set-AzVMRunCommand -ResourceGroupName MyRG0 -VMName MyVML -RunCommandName MyRunCommand3 -Location EastUS2EUAP -ScriptLocalPath "C:\MyScriptsDir\MyScript.ps1" -OutputBlobUri <OutPutBlobUrI> -ErrorBlobUri "ErrorBlobUri

Observação

Os blobs de saída e erro devem ser do tipo AppendBlob, e suas URLs SAS devem fornecer acesso de leitura, acréscimo, criação e gravação ao blob. Um tempo de expiração de 24 horas é sugerido para a URL SAS. Se o blob de saída ou de erro não existir, um blob do tipo AppendBlob será criado. As URLs SAS podem ser geradas no portal do Azure usando as opções do blob ou o token SAS usando New-AzStorageBlobSASToken.

Criar ou atualizar Executar Comando em uma VM como um usuário diferente usando os parâmetros RunAsUser e RunAsPassword

Crie ou atualize o Comando de Execução em uma VM como um usuário diferente usando os parâmetros RunAsUser e RunAsPassword. Para que RunAs funcione corretamente, entre em contato com o administrador da VM e verifique se o usuário foi adicionado à VM, se o usuário tem acesso aos recursos acessados pelo Executar Comando (Diretórios, Arquivos, Rede etc.) e, no caso da VM do Windows, se o serviço 'Logon Secundário' está em execução na VM.

Set-AzVMRunCommand -ResourceGroupName MyRG0 -VMName MyVMEE -RunCommandName MyRunCommand -Location EastUS2EUAP -ScriptLocalPath "C:\MyScriptsDir\MyScript.ps1" -RunAsUser myusername -RunAsPassword mypassword

Criar ou atualizar Executar Comando em um recurso de Conjuntos de Dimensionamento de Máquinas Virtuais usando SourceScriptUri (URL SAS do blob de armazenamento)

Crie ou atualize Executar Comando em um recurso de Conjuntos de Dimensionamento de Máquinas Virtuais do Windows usando uma URL SAS de um blob de armazenamento que contém um script do PowerShell.

Set-AzVmssVMRunCommand -ResourceGroupName MyRG0 -VMScaleSetName MyVMSS -InstanceId 0 -RunCommandName MyRunCommand -Location EastUS2EUAP -SourceScriptUri <SourceScriptUri>

Observação

A URL SAS deve fornecer acesso de leitura ao blob. Um tempo de expiração de 24 horas é sugerido para a URL SAS. As URLs SAS podem ser geradas no portal do Azure usando as opções do blob ou o token SAS usando New-AzStorageBlobSASToken. Se gerar o token SAS usando New-AzStorageBlobSASToken, o formato de URL SAS será: URL de blob base + "?" + o token SAS de New-AzStorageBlobSASToken.

Criar ou atualizar Executar Comando em uma instância de VM usando os parâmetros Parameter e ProtectedParameter (parâmetros públicos e protegidos para script)

Use ProtectedParameter para passar quaisquer entradas confidenciais para script, como senhas, chaves etc.

$PublicParametersArray = @([Microsoft.Azure.PowerShell.Cmdlets.Compute.Models.Api20210701.IRunCommandInputParameter]@{name='publicParam1';value='publicParam1value'},
>> [Microsoft.Azure.PowerShell.Cmdlets.Compute.Models.Api20210701.IRunCommandInputParameter]@{name='publicParam2';value='publicParam2value'})

$ProtectedParametersArray = @([Microsoft.Azure.PowerShell.Cmdlets.Compute.Models.Api20210701.IRunCommandInputParameter]@{name='secret1';value='secret1value'},
>> [Microsoft.Azure.PowerShell.Cmdlets.Compute.Models.Api20210701.IRunCommandInputParameter]@{name='secret2';value='secret2value'})

Set-AzVMRunCommand -ResourceGroupName MyRG0 -VMName MyVMEE -RunCommandName MyRunCommand -Location EastUS2EUAP -SourceScriptUri <SourceScriptUri> -Parameter $PublicParametersArray -ProtectedParameter $ProtectedParametersArray
  • Windows: Parameters e ProtectedParameters são passados para o script conforme os argumentos são passados para o script e são executados assim como – myscript.ps1 -publicParam1 publicParam1value -publicParam2 publicParam2value -secret1 secret1value -secret2 secret2value

  • Linux: parâmetros nomeados e seus valores são definidos como configuração de ambiente, que deve ser acessível dentro do script .sh. Para argumentos sem nome, passe uma cadeia de caracteres vazia para nomear a entrada. Argumentos sem nome são passados para script e executados assim – myscript.sh publicParam1value publicParam2value secret1value secret2value

Excluir o recurso RunCommand da VM

Remova o recurso RunCommand implantado anteriormente na VM. Se a execução do script ainda estiver em andamento, a execução será encerrada.

Remove-AzVMRunCommand -ResourceGroupName "myRG" -VMName "myVM" -RunCommandName "RunCommandName"

Executar vários comandos de execução sequencialmente

Por padrão, se você implantar vários recursos RunCommand usando o modelo de implantação, eles serão executados simultaneamente na VM. Se você tiver uma dependência nos scripts e uma ordem de execução preferida, poderá usar a propriedade dependsOn para que eles sejam executados em sequência.

Nesse exemplo, secondRunCommand será executado após firstRunCommand.

{
   "$schema":"https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
   "contentVersion":"1.0.0.0",
   "resources":[
      {
         "type":"Microsoft.Compute/virtualMachines/runCommands",
         "name":"[concat(parameters('vmName'),'/firstRunCommand')]",
         "apiVersion":"2023-03-01",
         "location":"[parameters('location')]",
         "dependsOn":[
            "[concat('Microsoft.Compute/virtualMachines/', parameters('vmName'))]"
         ],
         "properties":{
            "source":{
               "script":"Write-Host First: Hello World!"
            },
            "parameters":[
               {
                  "name":"param1",
                  "value":"value1"
               },
               {
                  "name":"param2",
                  "value":"value2"
               }
            ],
            "timeoutInSeconds":20
         }
      },
      {
         "type":"Microsoft.Compute/virtualMachines/runCommands",
         "name":"[concat(parameters('vmName'),'/secondRunCommand')]",
         "apiVersion":"2019-12-01",
         "location":"[parameters('location')]",
         "dependsOn":[
            "[concat('Microsoft.Compute/virtualMachines/', parameters('vmName'),'runcommands/firstRunCommand')]"
         ],
         "properties":{
            "source":{
               "scriptUri":"http://github.com/myscript.ps1"
            },
            "timeoutInSeconds":60
         }
      }
   ]
}

Próximas etapas

Para conhecer outras maneiras de executar scripts e comandos remotamente em sua VM, consulte Executar scripts na VM do Windows.