Partager via


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

La fonctionnalité Run Command utilise l’agent de machine virtuelle pour exécuter des scripts PowerShell 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.

Avantages

Vous pouvez accéder à vos machines virtuelles de plusieurs façons. Run Command peut exécuter à distance des scripts sur vos machines virtuelles à l’aide de l’agent de machine virtuelle. Vous utilisez Run Command par le biais du Portail Azure, de l’API REST ou de PowerShell pour machines virtuelles Windows.

Cette fonctionnalité est utile dans tous les scénarios où vous souhaitez exécuter un script sur une machine virtuelle. C’est l’une des seules manières de détecter et de corriger un problème sur une machine virtuelle qui n’a pas de port RDP ou SSH ouvert en raison d’une configuration incorrecte du réseau ou de l’utilisateur administratif.

Prérequis

Système d’exploitation Windows pris en charge

Système d’exploitation Windows x64
Windows 10 Prise en charge
Windows 11 Prise en charge
Windows Server 2008 SP2 Prise en charge
Windows Server 2008 R2 Prise en charge
Windows Server 2012 Prise en charge
Windows Server 2012 R2 Prise en charge
Windows Server 2016 Prise en charge
Windows Server 2016 Core Prise en charge
Windows Server 2019 Prise en charge
Windows Server 2019 Core Prise en charge
Windows Server 2022 Prise en charge
Windows Server 2022 Core Prise en charge

Restrictions

Les restrictions suivantes s’appliquent lorsque vous utilisez Run Command :

  • La sortie est limitée aux derniers 4 096 octets.
  • La durée minimale d’exécution d’un script est d’environ 20 secondes.
  • Les scripts s’exécutent en tant que système sous Windows.
  • Vous ne pouvez exécuter qu’un script à la fois.
  • Les scripts qui demandent des informations (mode interactif) ne sont pas pris en charge.
  • Vous ne pouvez pas annuler un script en cours d’exécution.
  • La durée maximale d’exécution d’un script est de 90 minutes. Le script expire après ce délai.
  • Une connectivité sortante à partir de la machine virtuelle est nécessaire pour retourner les résultats du script.
  • Il n’est pas recommandé d’exécuter un script qui provoquera l’arrêt ou la mise à jour de l’agent de machine virtuelle. Cela peut maintenir l’extension dans un état de transition, ce qui entraîne l’expiration du délai d’attente.

Notes

Pour fonctionner correctement, Run Command a besoin d’une connectivité (port 443) aux adresses IP publiques Azure. Si l’extension n’a pas accès à ces points de terminaison, il se peut que les scripts s’exécutent correctement, mais qu’ils ne retournent pas les résultats. Si vous bloquez le trafic sur la machine virtuelle, vous pouvez utiliser des balises de service pour autoriser le trafic à destination des IP publiques Azure en utilisant la balise AzureCloud.

La fonctionnalité Exécuter la commande ne fonctionne pas si l’état de l’agent de machine virtuelle n’est PAS PRÊT. Vérifiez l’état de l’agent dans les propriétés de la machine virtuelle dans le portail Azure.

Commandes disponibles

Ce tableau affiche la liste des commandes disponibles pour les machines virtuelles Windows. Vous pouvez utiliser la commande RunPowerShellScript pour exécuter n’importe quel script personnalisé de votre choix. Quand vous utilisez Azure CLI ou PowerShell pour exécuter une commande, la valeur que vous fournissez pour le paramètre --command-id ou -CommandId doit être l’une des valeurs listées ci-dessous. Quand vous spécifiez une valeur qui n’est pas une commande disponible, vous recevez cette erreur :

The entity was not found in this Azure location

Nom Description
RunPowerShellScript Exécute un script PowerShell.
DisableNLA Désactiver l’authentification au niveau du réseau
DisableWindowsUpdate Désactiver les mises à jour automatiques de Windows Update
EnableAdminAccount Vérifie si le compte Administrateur local est désactivé, et si tel est le cas, l’active.
EnableEMS Active EMS
EnableRemotePS Configure la machine pour activer PowerShell à distance.
EnableWindowsUpdate Activer les mises à jour automatiques de Windows Update
IPConfig Affiche des informations détaillées pour l’adresse IP, le masque de sous-réseau et la passerelle par défaut de chaque adaptateur lié à TCP/IP.
RDPSettings Vérifie les paramètres du registre et les paramètres de la stratégie de domaine. Suggère les actions de la stratégie si la machine fait partie d’un domaine ou remplace les paramètres par les valeurs par défaut.
ResetRDPCert Supprime le certificat TLS/SSL lié à l’écouteur RDP et restaure les valeurs par défaut pour la sécurité de l’écouteur RDP. Utilisez ce script si vous rencontrez des problèmes avec le certificat.
SetRDPPort Définit le numéro de port par défaut ou spécifié par l’utilisateur pour les connexions Bureau à distance. Active les règles de pare-feu pour l’accès entrant au port.

Azure CLI

L’exemple suivant utilise la commande az vm run-command pour exécuter un script d’interpréteur de commandes sur une machine virtuelle Windows 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"

Portail Azure

Accédez à une machine virtuelle dans le Portail Azure et sélectionnez Run command dans le menu de gauche sous Opérations. Une liste des commandes pouvant s’exécuter sur la machine virtuelle s’affiche.

Liste des commandes

Choisissez une commande à exécuter. Certaines des commandes peuvent avoir des paramètres d’entrée facultatifs ou obligatoires. Pour ces commandes, les paramètres sont présentés en tant que champs de texte vous permettant de fournir les valeurs d’entrée. Pour chaque commande, vous pouvez voir le script en cours d’exécution en développant Afficher le script. La commande RunPowerShellScript est différente des autres commandes, car elle vous permet de fournir votre propre script personnalisé.

Notes

Les commandes intégrées ne sont pas modifiables.

Une fois que vous avez choisi la commande, sélectionnez Exécuter pour exécuter le script. Une fois le script terminé, il renvoie la sortie et toutes les erreurs dans la fenêtre de sortie. La capture d’écran suivante montre un exemple de sortie de l’exécution de la commande RDPSettings.

Sortie du script d’une commande Run

PowerShell

L’exemple suivant utilise l’applet de commande Invoke-AzVMRunCommand pour exécuter un script PowerShell sur une machine virtuelle Azure. Pour la cmdlet, le script référencé dans le paramètre -ScriptPath doit se situer au même emplacement qu'elle.

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

Notes

Les valeurs de paramètre peuvent être de type chaîne uniquement et le script est chargé de les convertir en d’autres types si nécessaire.

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/runCommands/action. 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.

Résolution des problèmes rencontrés avec Action Run Command dans Windows

Pour résoudre des problèmes rencontrés avec Action Run Command dans les environnements Windows, examinez les détails du fichier journal RunCommandExtension, qui se trouve généralement dans le répertoire suivant : C:\WindowsAzure\Logs\Plugins\Microsoft.CPlat.Core.RunCommandWindows\<version>\RunCommandExtension.log

Problèmes connus

  • L’extension Action Run Command peut échouer à s’exécuter dans votre environnement Windows si la commande contient des caractères réservés. Par exemple :

    Si le symbole & est passé dans le paramètre de la commande, comme dans le script PowerShell ci-dessous, l’exécution peut échouer.

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

    Utilisez le caractère ^ pour placer & en échappement dans l’argument. Par exemple : $paramm='abc^&jj'

  • L’extension Run Command peut également ne pas s’exécuter si la commande à exécuter contient « \n » dans le chemin. Dans ce cas, elle sera traitée comme une nouvelle ligne. Par exemple, C:\Windows\notepad.exe contient \n dans le chemin du fichier. Prévoyez de remplacer \n par \N dans le chemin.

  • Vérifiez que vous n’avez pas de paramètre personnalisé dans la de clé de Registre HKLM\SOFTWARE\Microsoft\Command Processor\AutoRun (détaillée ici). Cela peut se déclencher pendant l’installation de l’extension RunCommand ou activer des phases et provoquer une erreur telle que « XYZ n’est pas reconnu comme une commande interne ou externe, un programme opérable ou un fichier batch ».

Suppression d’Action Run Command

Si vous devez supprimer l’extension Windows Action Run Command, reportez-vous aux étapes ci-dessous pour la procédure avec Azure PowerShell et l’interface CLI :

Dans les exemples de suppression suivants, remplacez rgname et vmname par le nom de votre groupe de ressources et celui de votre machine virtuelle, respectivement.

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

Notes

Lorsque vous appliquez à nouveau Run Command, l’extension est installée automatiquement. Vous pouvez utiliser la commande de suppression d’extension pour résoudre les problèmes liés à l’extension.

É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.