Partager via


Exécuter des scripts dans votre machine virtuelle Windows à l’aide de commandes d’exécution managées

S’applique à : ✔️ Machines virtuelles Windows ✔️ Ensembles de mise à l'échelle flexibles

La fonctionnalité Run Command utilise l’agent de machine virtuelle pour exécuter des scripts au sein d’une machine virtuelle Windows Azure. Vous pouvez utiliser ces scripts pour la gestion générale des ordinateurs ou des applications. Ils peuvent vous aider à diagnostiquer et corriger rapidement les problèmes de réseau et d’accès aux machines virtuelles et à rétablir l’état de la machine virtuelle.

La commande Run Command managée mise à jour utilise le même canal d’agent de machine virtuelle pour exécuter les scripts et fournit les améliorations suivantes par rapport à la commande Run Command orientée vers l’action d’origine :

  • Prise en charge de Run Command mis à jour via le modèle de déploiement ARM
  • Exécution parallèle de plusieurs scripts
  • Exécution séquentielle de scripts
  • Délai d’expiration du script spécifié par l’utilisateur
  • Prise en charge des scripts de longue durée (heures/jours)
  • Transmission de secrets (paramètres, mots de passe) de manière sécurisée

Important

La fonctionnalité Run Command managée est actuellement disponible dans Azure CLI, PowerShell et API.

Prérequis

Systèmes d’exploitation Windows pris en charge

Version du système d'exploitation x64 ARM64
Windows 10 Pris en charge Pris en charge
Windows 11 Pris en charge Pris en charge
Windows Server 2016 Pris en charge Pris en charge
Windows Server 2016 Core Pris en charge Pris en charge
Windows Server 2019 Pris en charge Pris en charge
Windows Server 2019 Core Pris en charge Pris en charge
Windows Server 2022 Pris en charge Pris en charge
Windows Server 2022 Core Pris en charge Pris en charge
Windows Server 2022 Azure Edition Pris en charge Pris en charge
Windows Server 2025 Pris en charge Pris en charge
Windows Server 2025 Core Pris en charge Pris en charge
Windows Server 2025 Azure Edition Pris en charge Pris en charge

Commandes disponibles

CommandID Description Informations supplémentaires
RunPowerShellScript Exécute un script PowerShell.
DisableNLA Désactive l’authentification au niveau du réseau. Vous devez redémarrer la machine virtuelle une fois le script terminé pour que la modification prenne effet. Le script lui-même ne redémarre pas la machine virtuelle. readme
DisableWindowsUpdate Désactivez les mises à jour automatiques via Windows Update. readme
EnableAdminAccount Vérifie si le compte d’administrateur local est désactivé, et le cas échéant l’active. readme
EnableEMS Activez les services de gestion des urgences (EMS) pour autoriser la connexion de la console série dans les scénarios de résolution des problèmes. readme
EnableRemotePS Activez PowerShell à distance. readme
EnableWindowsUpdate Activer les mises à jour automatiques via Windows Update. readme
IMDSCertCheck Vérifie la santé de l'IMDS, puis analyse les certificats actuellement installés dont dépend l'IMDS. S’il est manquant, affiche des détails supplémentaires et des étapes d’atténuation. readme
IPConfig Affiche des informations détaillées sur l’adresse IP, le masque de sous-réseau et la passerelle par défaut pour chaque adaptateur lié à TCP/IP. Pour une utilisation, reportez-vous à Exécuter des scripts readme
RDPSettings Vérifie les paramètres du registre et les paramètres de la stratégie de domaine. Suggère des actions de stratégie si l’ordinateur fait partie d’un domaine ou modifie les paramètres en valeurs par défaut. readme
ResetRDPCert Supprime le certificat SSL lié à l’écouteur RDP et restaure la sécurité de l’écouteur RDP par défaut. Utilisez ce script si vous rencontrez des problèmes avec le certificat. readme
SetRDPPort Définit le numéro de port par défaut ou spécifié par l’utilisateur pour les connexions Bureau à distance. Active la règle de pare-feu pour l’accès entrant au port. readme
WindowsActivationValidation Vérifie l’état actuel de la licence Windows (activé ou non) et l’alerte est générée si la machine n’est pas activée. readme
WindowsGhostedNicValidationScript Ce script analyse le registre Windows pour identifier les cartes réseau sur les bus PCI et VMBUS, les compare aux cartes réseau actuellement actives et identifie les cartes réseau fantômes. Utile pour résoudre les problèmes réseau ou nettoyer les anciennes cartes réseau. readme
WindowsUpgradeAssessmentValidation Ce script est conçu pour évaluer la préparation d’une machine Windows (client ou serveur) pour une mise à niveau sur place du système d’exploitation, avec des considérations spéciales pour les machines virtuelles Azure. Il évalue la version du système d’exploitation, les chemins de mise à niveau pris en charge, l’espace disque système et les fonctionnalités de sécurité Azure telles que Le lancement approuvé, le démarrage sécurisé et vTPM. readme

Remarque

Les ID de commande ci-dessus s’appliquent aux commandes d’exécution managées pour les machines virtuelles Windows. Vous pouvez répertorier tous les commandIds à l’aide de la commande «Get-AzVMRunCommandDocument -Location {RegionName} ».

Limitation de l’accès à la commande Run

Le listage des commandes d’exécution ou l’affichage des détails d’une commande nécessite l’autorisation Microsoft.Compute/locations/runCommands/read au niveau de l’abonnement. Le rôle intégré Lecteur et les niveaux supérieurs disposent de cette autorisation.

L’exécution d’une commande nécessite l’autorisation Microsoft.Compute/virtualMachines/runCommand/write. Le rôle Contributeur de machines virtuelles et les niveaux supérieurs disposent de cette autorisation.

Vous pouvez utiliser un des rôles intégrés ou créer un rôle personnalisé afin d’exécuter Run Command.

Utilisation des commandes d’exécution

Exécuter un script avec la machine virtuelle

Cette commande remet le script à la machine virtuelle, l’exécute et retourne la sortie capturée.

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

Exécuter un script sur la machine virtuelle à l’aide du paramètre SourceScriptUri

OutputBlobUri et ErrorBlobUri sont des paramètres facultatifs.

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

Exécuter Run Command en exécution durable sur une machine virtuelle

Le temps d’exécution doit être supérieur au délai d’expiration par défaut de 90 minutes. Il doit s’exécuter pendant 100 minutes (voir le paramètre TimeoutInSecond défini sur 6000 secondes) à condition que le script s’exécute aussi longtemps. Après 100 minutes, l’exécution du script doit s’arrêter.

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

Répertorier toutes les ressources RunCommand déployées sur une machine virtuelle

Cette commande retourne une liste complète des commandes Run Command précédemment déployées, ainsi que leurs propriétés.

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

Obtenir l’état et les résultats de l’exécution

Cette commande permet de récupérer la progression de l’exécution actuelle, y compris la dernière sortie, l’heure de début/fin, le code de sortie et l’état terminal de l’exécution.

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

Créer ou mettre à jour Run Command sur une machine virtuelle à l’aide de SourceScriptUri (URL SAS d’objet blob de stockage)

Créez ou mettez à jour Run Command sur une machine virtuelle Windows à l’aide d’une URL SAP d’un objet blob de stockage qui contient un script PowerShell. SourceScriptUri peut être l’URL SAP complète ou l’URL publique d’un objet blob de stockage.

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

Remarque

L’URL SAS doit fournir un accès en lecture au blob. Un délai d’expiration de 24 heures est suggéré pour l’URL SAS. Les URL SAP peuvent être générées sur le Portail Azure à l’aide des options de l’objet blob ou d’un jeton SAP à l’aide de New-AzStorageBlobSASToken. Si vous générez un jeton SAS à l’aide de New-AzStorageBlobSASToken, votre URL SAS = « URL d’objet blob de base » + « ? » + « Jeton SAS à partir de New-AzStorageBlobSASToken »

Obtenir une vue d’instance Run Command pour une machine virtuelle après la création ou la mise à jour de Run Command

Obtenir une Run Command pour une machine virtuelle avec la vue Instance. La vue d’instance contient l’état d’exécution de la commande d’exécution (Réussite, Échec, etc.), le code de sortie, la sortie standard et l’erreur standard générées en exécutant le script à l’aide de la commande Exécuter. Un code d’arrêt (ExitCode) différent de zéro indique une exécution échouée.

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

Exemple de sortie

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 : État du script Run Command de l’utilisateur. Reportez-vous à cet état pour savoir si votre script a réussi ou non. ProvisioningState : état de l’approvisionnement général des extensions de bout en bout (si la plateforme d’extension a pu déclencher ou non le script Run Command).

Créer ou mettre à jour Run Command sur une machine virtuelle à l’aide de ScriptLocalPath (fichier de script local)

Créez ou mettez à jour Run Command sur une machine virtuelle à l’aide d’un fichier de script local qui se trouve sur l’ordinateur client où la cmdlet est exécutée.

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

Créer ou mettre à jour Run Command exécution sur une machine virtuelle à l’aide de SourceScript (texte de script)

Créez ou mettez à jour Run Command sur une machine virtuelle en passant le contenu du script directement au paramètre -SourceScript. Utiliser ; pour séparer plusieurs commandes

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

Créer ou mettre à jour Run Command sur une machine virtuelle à l’aide de SourceCommandId

Créez ou mettez à jour une commande d’exécution sur une machine virtuelle à l’aide de commandId préexistant. Les commandId disponibles peuvent être récupérés à l’aide de Get-AzVMRunCommandDocument.

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

Créer ou mettre à jour Run Command sur une machine virtuelle à l’aide de OutputBlobUri, ErrorBlobUri pour diffuser en continu des messages d’erreur standard et de sortie standard vers des objets blob Ajouter de sortie et d’erreurs

Créez ou mettez à jour Run Command sur une machine virtuelle pour diffuser en continu des messages d’erreur standard vers des objets blob Ajouter de sortie et d’erreurs.

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

Remarque

Les objets blob de sortie et d’erreur doivent être de type AppendBlob et leurs URL SAS doivent fournir un accès en lecture, ajout, création et écriture sur l’objet blob. Un délai d’expiration de 24 heures est suggéré pour l’URL SAS. Si le blob de sortie ou d'erreur n'existe pas, un blob de type "AppendBlob" est créé. Les URL SAP peuvent être générées sur le Portail Azure à l’aide des options de l’objet blob ou d’un jeton SAP à l’aide de New-AzStorageBlobSASToken.

Créer ou mettre à jour Run Command sur une machine virtuelle en tant qu’utilisateur différent à l’aide des paramètres RunAsUser et RunAsPassword

Créez ou mettez à jour Run Command sur une machine virtuelle en tant qu’utilisateur différent à l’aide des paramètres RunAsUser et RunAsPassword. Pour que RunAs fonctionne correctement, contactez l’administrateur de la machine virtuelle et vérifiez que l’utilisateur est ajouté sur la machine virtuelle, qu’il a accès aux ressources accessibles par Run Command (répertoires, fichiers, réseau, etc.) et, dans le cas d’une machine virtuelle Windows, que le service « Ouverture de session secondaire » est en cours d’exécution sur la machine virtuelle.

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

Créer ou mettre à jour Run Command sur une ressource Virtual Machine Scale Sets à l’aide de SourceScriptUri (URL SAS d’objet blob de stockage)

Créez ou mettez à jour Run Command sur une ressource Virtual Machine Scale Sets Windows à l’aide d’une URL SAP d’un objet blob de stockage qui contient un script PowerShell.

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

Remarque

L’URL SAS doit fournir un accès en lecture au blob. Un délai d’expiration de 24 heures est suggéré pour l’URL SAS. Les URL SAP peuvent être générées sur le Portail Azure à l’aide des options de l’objet blob ou d’un jeton SAP à l’aide de New-AzStorageBlobSASToken. Si vous générez un jeton SAS à l’aide de New-AzStorageBlobSASToken, le format d’URL SAS est: URL de blob de base + « ? » + le jeton SAS à partir de New-AzStorageBlobSASToken.

Créer ou mettre à jour Run Command sur une instance de machine virtuelle à l’aide des paramètres Parameter et ProtectedParameter (paramètres publics et protégés pour le script)

Utilisez ProtectedParameter pour passer toutes les entrées sensibles au script, comme les mots de passe, les clés, 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 et ProtectedParameters sont passés au script en tant qu’arguments et s’exécutent comme suit : myscript.ps1 -publicParam1 publicParam1value -publicParam2 publicParam2value -secret1 secret1value -secret2 secret2value

  • Linux : Les paramètres nommés et leurs valeurs sont définis sur la configuration de l’environnement, qui doit être accessible dans le script .sh. Pour les arguments sans nom, passez une chaîne vide pour nommer l’entrée. Les arguments sans nom sont passés au script et s’exécutent comme suit : myscript.sh publicParam1value publicParam2value secret1value secret2value

Supprimer la ressource RunCommand de la machine virtuelle

Supprimez la ressource RunCommand précédemment déployée sur la machine virtuelle. Si l’exécution du script est toujours en cours, l’exécution se termine.

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

Exécuter plusieurs Run Command de manière séquentielle

Par défaut, si vous déployez plusieurs ressources RunCommand à l’aide du modèle de déploiement, elles sont exécutées simultanément sur la machine virtuelle. Si vous avez une dépendance sur les scripts et un ordre d’exécution par défaut, vous pouvez utiliser la propriété dependsOn pour les faire s’exécuter de manière séquentielle.

Dans cet exemple, secondRunCommand s’exécute aprè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
         }
      }
   ]
}

Étapes suivantes

Pour en savoir plus sur les autres méthodes pour exécuter à distance des commandes et des scripts dans votre machine virtuelle, consultez Exécuter des scripts dans votre machine virtuelle Windows.