Compartir a través de


Ejecución de scripts en una máquina virtual Windows mediante la acción Ejecutar comandos

La función Ejecutar comando usa el agente de máquina virtual (VM) para ejecutar los scripts de PowerShell de una VM Windows de Azure. Puede usar estos scripts para la administración general de máquinas o aplicaciones. Pueden ayudarle a diagnosticar y corregir rápidamente el acceso a la máquina virtual y los problemas de red, así como a revertir la máquina virtual a un buen estado.

Ventajas

Puede acceder a las máquinas virtuales de varias maneras. Ejecutar comando puede ejecutar scripts en sus máquinas virtuales de forma remota con el agente de VM. Ejecutar comando se usa mediante Azure Portal, la API REST o PowerShell para VM con Windows.

Esta funcionalidad es útil en todos los escenarios en los que quiera ejecutar un script en una máquina virtual. Es uno de los únicos métodos para solucionar problemas y corregir una máquina virtual que no tiene abierto el puerto RDP o SSH debido a una configuración incorrecta de red o de usuario administrativo.

Requisitos previos

Sistemas operativos Windows compatibles

Versión del sistema operativo x64 ARM64
Windows 10 Compatible Compatible
Windows 11 Compatible Compatible
Windows Server 2016 Compatible Compatible
Windows Server 2016 Core Compatible Compatible
Windows Server 2019 Compatible Compatible
Windows Server 2019 Core Compatible Compatible
Windows Server 2022 Compatible Compatible
Windows Server 2022 Core Compatible Compatible
Windows Server 2022 Azure Edition Compatible Compatible
Windows Server 2025 Compatible Compatible
Windows Server 2025 Core Compatible Compatible
Windows Server 2025 Azure Edition Compatible Compatible

Restricciones

Las siguientes consideraciones se aplican al usar el Ejecutar comando:

  • La salida se limita a los últimos 4096 bytes.
  • El tiempo mínimo para ejecutar un script es de aproximadamente 20 segundos.
  • Los script se ejecutan como sistema en Windows.
  • Se puede ejecutar un script a la vez.
  • No se admiten los scripts que solicitan información (modo interactivo).
  • No se puede cancelar un script en ejecución.
  • El tiempo máximo que se puede ejecutar un script es de 90 minutos. Después, se agotará el tiempo de espera.
  • La conectividad saliente de la máquina virtual es necesaria para devolver los resultados del script.
  • No se recomienda ejecutar un script que provoque la detención o actualización del agente de máquina virtual. Esto puede llevar a la extensión a un estado de transición, dando lugar a un tiempo de espera.

Nota:

Para poder funcionar correctamente, Ejecutar comando requiere conectividad (puerto 443) a las direcciones IP públicas de Azure. Si la extensión no tiene acceso a estos puntos de conexión, los scripts pueden ejecutarse correctamente, pero no devuelven los resultados. Si va a bloquear el tráfico de la máquina virtual, puede usar las etiquetas de servicio para permitir el tráfico a las direcciones IP públicas de Azure mediante la etiqueta AzureCloud.

La característica Ejecutar no funciona si el estado del agente de máquina virtual es NOT READY. Compruebe el estado del agente en las propiedades de la máquina virtual en Azure Portal.

Comandos disponibles

Esta tabla muestra la lista de comandos disponibles para máquinas virtuales Windows. Puede usar el comando RunPowerShellScript para ejecutar cualquier script personalizado. Al usar la CLI de Azure o PowerShell para ejecutar un comando, el valor que se proporciona para el parámetro --command-id o -CommandId debe ser uno de los siguientes valores. Cuando se especifica un valor que no es un comando disponible, se recibe este error:

The entity was not found in this Azure location

Comandos disponibles

CommandID Descripción Más información
RunPowerShellScript Ejecuta un script de PowerShell.
DisableNLA Deshabilita la autenticación a nivel de red (NLA). Debe reiniciar la máquina virtual una vez completado el script para que el cambio surta efecto. El propio script no reinicia la máquina virtual. readme
DisableWindowsUpdate Deshabilitar las actualizaciones automáticas a través de Windows Update. readme
EnableAdminAccount Comprueba si la cuenta de administrador local está deshabilitada y, si es así, la habilita. readme
EnableEMS Active la administración de servicios de emergencia (EMS) para permitir la conexión de la consola serial en contextos de resolución de problemas. readme
EnableRemotePS Habilite PowerShell remoto. readme
EnableWindowsUpdate Habilitar actualizaciones automáticas a través de Windows Update. readme
IMDSCertCheck Comprueba el estado de IMDS y, a continuación, analiza los certificados instalados actualmente de los que depende IMDS. Si falta, muestra detalles adicionales y pasos de mitigación. readme
IPConfig Muestra información detallada sobre la dirección IP, la máscara de subred y la puerta de enlace predeterminada para cada adaptador enlazado a TCP/IP. Para el uso, consulte Ejecución de scripts. readme
RDPSettings Comprueba la configuración del registro y de la directiva de dominio. Sugiere acciones de directiva si la máquina forma parte de un dominio o modifica la configuración a los valores predeterminados. readme
ResetRDPCert Quita el certificado SSL asociado al agente de escucha RDP y restaura la seguridad del agente de escucha RDP de forma predeterminada. Use este script si ve algún problema con el certificado. readme
SetRDPPort Establece el número de puerto predeterminado o especificado por el usuario para las conexiones de Escritorio remoto. Habilita la regla de firewall para el acceso entrante al puerto. readme
WindowsActivationValidation Comprueba el estado actual de la licencia de Windows (activado o no) y se genera una alerta si la máquina no está activada. readme
WindowsGhostedNicValidationScript Este script examina el Registro de Windows para los adaptadores de red en buses PCI y VMBUS, los compara con adaptadores de red activos actualmente e identifica las NIC fantasmas. Resulta útil para solucionar problemas de red o limpiar las NIC antiguas. readme
WindowsUpgradeAssessmentValidation Este script está diseñado para evaluar la preparación de una máquina Windows (cliente o servidor) para una actualización local del sistema operativo, con consideraciones especiales para Azure Virtual Machines. Evalúa la versión del sistema operativo, las rutas de actualización admitidas, el espacio en disco del sistema y las características de seguridad de Azure, como inicio seguro, arranque seguro y vTPM. readme

Limitación del acceso al comando Ejecutar

Para enumerar los comandos ejecutados o mostrar los detalles de un comando, se requiere el permiso Microsoft.Compute/locations/runCommands/read en el nivel de suscripción. El rol de lector integrado tiene este permiso, al igual que los roles superiores.

La ejecución de un comando requiere el permiso Microsoft.Compute/virtualMachines/runCommand/action. El rol colaborador de la máquina virtual tiene este permiso, al igual que los roles superiores.

Puede usar uno de los roles integrados o crear uno personalizado para usar Ejecutar comando.

Uso de comandos de ejecución

Nota:

  • Los valores de parámetro solo pueden ser de tipo cadena y el script es responsable de convertirlos a otros tipos si es necesario.
  • En función de la modalidad que se use para la ejecución, es posible que se necesite algún escape. Por ejemplo, si ejecuta el comando en una sesión de PowerShell, la ruta de acceso al archivo de script tendrá que tener comillas.
  • Los comandos integrados no son editables.

Vaya a una máquina virtual en Azure Portal y seleccione Ejecutar comando en el menú de la izquierda, en Operaciones. Se mostrará una lista de los comandos disponibles para ejecutarse en la máquina virtual.

Lista de comandos

Elija un comando para ejecutar. Algunos de los comandos pueden tener parámetros de entrada obligatorios u opcionales. Para estos comandos, los parámetros se presentan como campos de texto para que pueda proporcionar los valores de entrada. Para cada comando, puede ver el script que se está ejecutando si expande Ver script. RunPowerShellScript es diferente de los otros comandos, ya que permite proporcionar sus propios scripts personalizados.

Después de elegir el comando, seleccione Ejecutar para ejecutar el script. Una vez finalizada la ejecución del script, se devuelven el resultado y los errores en la ventana de salida. La siguiente captura de pantalla muestra un ejemplo de salida tras ejecutar el comando RDPSettings.

Salida del script del comando Ejecutar

Solución de problemas de acciones de comandos de ejecución

Al solucionar problemas del comando de ejecución de acciones para entornos Windows, consulte el archivo de registro RunCommandExtension que se encuentra normalmente en el siguiente directorio: C:\WindowsAzure\Logs\Plugins\Microsoft.CPlat.Core.RunCommandWindows\<version>\RunCommandExtension.log para obtener más detalles.

Problemas conocidos

  • Es posible que la extensión de comando de ejecución de acciones no se ejecute en el entorno de Windows si el comando contiene caracteres reservados. Por ejemplo:

    Si el símbolo & se pasa en el parámetro del comando, como el siguiente script de PowerShell, podría producir un error.

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

    Use el carácter ^ para escapar de & en el argumento, como $paramm='abc^&jj'

  • La extensión Ejecutar comando también podría no ejecutarse si el comando que se va a ejecutar contiene "\n" en la ruta de acceso, ya que se tratará como una nueva línea. Por ejemplo, C:\Windows\notepad.exe contiene \n en la ruta de acceso del archivo. Considere la posibilidad de reemplazar \n por \N en la ruta de acceso.

  • Asegúrese de que no tiene ninguna configuración personalizada en la clave del Registro HKLM\SOFTWARE\Microsoft\Command Processor\AutoRun (detallada aquí). Esto podría desencadenarse durante la instalación o habilitación de la extensión RunCommand y provocar un error como "XYZ no se reconoce como un comando interno o externo, programa operable o archivo por lotes".

Eliminación de la acción Ejecutar comando

Si necesita quitar la extensión de Windows del comando de ejecución de acciones, consulte los pasos siguientes para Azure PowerShell y la CLI:

Reemplace rgname y vmname por el nombre del grupo de recursos pertinente y el nombre de la máquina virtual en los ejemplos de eliminación siguientes.

 Invoke-AzVMRunCommand -ResourceGroupName 'rgname' -VMName 'vmname' -CommandId 'RemoveRunCommandWindowsExtension'

Nota:

Si vuelve a aplicar Ejecutar comando, la extensión se instalará automáticamente. El comando de eliminación de extensiones se puede usar para solucionar cualquier problema relacionado con la extensión.

Pasos siguientes

Para obtener información sobre otras maneras de ejecutar comandos y scripts de forma remota en la máquina virtual, consulte Ejecución de scripts en una máquina virtual Windows.