Compartir a través de


Ejecute scripts en su máquina virtual Windows mediante Comandos Ejecutar gestionados.

Se aplica a: ✔️ máquinas virtuales Windows ✔️ conjuntos de escalado flexibles

La característica Ejecutar comando usa el agente de máquina virtual (VM) para ejecutar scripts en una máquina virtual 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 problemas de acceso a la máquina virtual y de red, así como a revertir la máquina virtual a un estado correcto.

La característica administrada actualizada Ejecutar comando usa el mismo canal de agente de máquina virtual para ejecutar scripts y proporciona las siguientes mejoras con respecto a la característica Ejecutar comando original orientada a la acción:

  • Soporte para la característica actualizada "Run Command" mediante una plantilla de implementación de ARM
  • Ejecución en paralelo de varios scripts
  • Ejecución secuencial de scripts
  • Tiempo de espera del script especificado por el usuario
  • Compatibilidad con scripts de larga duración (horas o días)
  • Entrega de secretos (parámetros, contraseñas) de forma segura

Importante

Managed Run Command está disponible actualmente en la CLI de Azure, PowerShell y la API.

Prerrequisitos

Sistemas operativos Windows compatibles

Versión del SO 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

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

Nota:

Los identificadores de comando anteriores son aplicables a los comandos de ejecución administrada para máquinas virtuales Windows. Puede enumerar todos los commandIds mediante el comando "Get-AzVMRunCommandDocument -Location {RegionName}".

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/write. 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

Ejecución de un script con la máquina virtual

Este comando entrega el script a la máquina virtual, lo ejecuta y devuelve la salida capturada.

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

Ejecución de un script en la máquina virtual mediante el parámetro SourceScriptUri

Los parámetros opcionales son OutputBlobUri y ErrorBlobUri.

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>”

Ejecutar un comando de ejecución de larga duración en una máquina virtual

El tiempo de ejecución debe prolongarse más allá del tiempo de espera predeterminado de 90 minutos. El script debería ejecutarse durante 100 minutos (consulte el parámetro "TimeoutInSecond" de 60,000 segundos), siempre que se espere que funcione tanto tiempo. Después de 100 minutos, la ejecución del script debe detenerse.

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

Enumeración de todos los recursos RunCommand implementados en una máquina virtual

Este comando devuelve una lista completa de los comandos de ejecución implementados anteriormente junto con sus propiedades.

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

Obtención del estado de ejecución y los resultados

Este comando recupera el progreso de la ejecución actual, incluida la salida más reciente, la hora de inicio y finalización, el código de salida y el estado terminal de la ejecución.

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

Creación o actualización de una instancia de Ejecutar comando en una máquina virtual mediante SourceScriptUri (dirección URL de SAS del blob de almacenamiento)

Cree o actualice un Run Command en una máquina virtual Windows usando una URL de SAS de un blob de almacenamiento que contiene un script de PowerShell. SourceScriptUri puede ser la dirección URL completa de SAS de un blob de almacenamiento o una dirección URL pública.

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

Nota:

La dirección URL de SAS debe proporcionar acceso de lectura al blob. Se recomienda un tiempo de expiración de 24 horas para la dirección URL de SAS. Las direcciones URL de SAS se pueden generar en Azure Portal mediante las opciones del blob o el token de SAS mediante New-AzStorageBlobSASToken. Si genera un token de SAS mediante New-AzStorageBlobSASToken, la dirección URL de SAS = "dirección URL del blob base" + "?" + "token de SAS de New-AzStorageBlobSASToken"

Obtención de una vista de instancia de Ejecutar comando para una máquina virtual después de crear o actualizar una instancia de Ejecutar comando

Obtenga un comando de ejecución para la máquina virtual con vista de instancia. La vista de instancia contiene el estado de ejecución del comando run (Correcto, Erróneo, etc.), código de salida, salida estándar y error estándar generado mediante la ejecución del script mediante Ejecutar comando. Un valor de ExitCode distinto de cero indica una ejecución incorrecta.

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

Salida de ejemplo

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: estado del script Ejecutar comando del usuario. Consulte este estado para saber si el script se ejecutó correctamente o no. ProvisioningState: estado del aprovisionamiento general de extensiones de un extremo a otro (si la plataforma de extensión pudo desencadenar el script Ejecutar comando o no).

Creación o actualización de una instancia de Ejecutar comando en una máquina virtual mediante ScriptLocalPath (archivo de script local)

Cree o actualice el comando "Ejecutar" en una máquina virtual utilizando un archivo de script local que se encuentra en la máquina cliente donde se ejecuta el cmdlet.

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

Crear o actualizar Run Command en una VM mediante SourceScript (texto del script)

Cree o actualice una instancia de Ejecutar comando en una máquina virtual pasando el contenido del script directamente al parámetro -SourceScript. Utilice ; para separar varios comandos.

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

Creación o actualización de una instancia de Ejecutar comando en una máquina virtual mediante SourceCommandId

Cree o actualice Run Command en una máquina virtual mediante commandId preexistente. Los elementos commandId disponibles se pueden recuperar mediante Get-AzVMRunCommandDocument.

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

Creación o actualización de una instancia de Ejecutar comando en una máquina virtual mediante OutputBlobUri o ErrorBlobUri para transmitir los mensajes de error estándar y la salida estándar a los blobs en anexos de salida y error

Cree o actualice una instancia de Ejecutar comando en una máquina virtual y transmita los mensajes de error estándar y la salida estándar a los blobs en anexos de salida y error.

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

Nota:

Los blobs de salida y error deben ser de tipo AppendBlob y sus direcciones URL de SAS deben proporcionar acceso de lectura, anexión, creación y escritura al blob. Se recomienda un tiempo de expiración de 24 horas para la dirección URL de SAS. Si el blob de salida o de error no existieran, se creará un blob de tipo AppendBlob. Las direcciones URL de SAS se pueden generar en Azure Portal mediante las opciones del blob o el token de SAS mediante New-AzStorageBlobSASToken.

Creación o actualización de una instancia de Ejecutar comando en una máquina virtual como otro usuario mediante los parámetros RunAsUser y RunAsPassword

Cree o actualice el comando de ejecución en una máquina virtual como otro usuario mediante los parámetros RunAsUser y RunAsPassword. Para que RunAs funcione correctamente, póngase en contacto con el administrador de la máquina virtual y asegúrese de que el usuario se haya agregado a la misma, de que el usuario tenga acceso a los recursos a los que accede la instancia de Ejecutar comando (directorios, archivos, red, etc.) y, en el caso de máquinas virtuales Windows, de que el servicio "Inicio de sesión secundario" se encuentre en ejecución en la máquina virtual.

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

Creación o actualización de una instancia de Ejecutar comando en un recurso de Virtual Machine Scale Sets mediante SourceScriptUri (dirección URL de SAS de blob de almacenamiento)

Cree o actualice una instancia de Ejecutar comando en un recurso de Virtual Machine Scale Sets con Windows mediante una dirección URL de SAS de un blob de almacenamiento que contiene un script de PowerShell.

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

Nota:

La dirección URL de SAS debe proporcionar acceso de lectura al blob. Se recomienda un tiempo de expiración de 24 horas para la dirección URL de SAS. Las direcciones URL de SAS se pueden generar en Azure Portal mediante las opciones del blob o el token de SAS mediante New-AzStorageBlobSASToken. Si genera un token de SAS mediante New-AzStorageBlobSASToken, el formato de la dirección URL de SAS es: la dirección URL del blob base + "?" + el token de SAS de New-AzStorageBlobSASToken.

Creación o actualización de una instancia de Ejecutar comando en una instancia de máquina virtual mediante los parámetros Parameter y ProtectedParameter (parámetros públicos y protegidos para el script)

Utilice ProtectedParameter para pasar entradas confidenciales al script, como contraseñas, claves, 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: los parámetros Parameter y ProtectedParameters se pasan al script como argumentos y se ejecutan de esta forma: myscript.ps1 -publicParam1 publicParam1value -publicParam2 publicParam2value -secret1 secret1value -secret2 secret2value

  • Linux: los parámetros con nombre y sus valores se establecen en la configuración del entorno, que debe ser accesible dentro del script .sh. Para argumentos sin nombre, pase una cadena vacía en el campo de nombre. Los argumentos sin nombre se pasan al script y se ejecutan de esta manera: myscript.sh publicParam1value publicParam2value secret1value secret2value

Eliminación del recurso RunCommand de la máquina virtual

Quite el recurso RunCommand implementado anteriormente en la máquina virtual. Si la ejecución del script sigue en curso, se interrumpe.

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

Ejecución secuencial de varias instancias de Ejecutar comando

De manera predeterminada, si implementa varios recursos RunCommand mediante una plantilla de implementación, se ejecutan simultáneamente en la máquina virtual. Si tiene una dependencia en los scripts y un orden de ejecución preferido, puede usar la propiedad dependsOn para que se ejecuten secuencialmente.

En este ejemplo, secondRunCommand se ejecuta después de 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
         }
      }
   ]
}

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.