Partager via


Automatisation et gestion des machines virtuelles à l’aide de PowerShell

Vous pouvez utiliser PowerShell Direct pour exécuter powerShell arbitraire dans windows 10 ou version ultérieure, ou Windows Server 2016 ou version ultérieure, machine virtuelle à partir de votre hôte Hyper-V. Utilisez PowerShell Direct, quelle que soit la configuration réseau ou les paramètres de gestion à distance.

Voici quelques façons d’exécuter PowerShell Direct :

Spécifications

Configuration requise du système d’exploitation :

  • Hôte : Windows 10, Windows Server 2016 ou version ultérieure exécutant Hyper-V.
  • Machine virtuelle/invité : Windows 10, Windows Server 2016 ou version ultérieure.

Si vous gérez des machines virtuelles plus anciennes, utilisez la connexion de machine virtuelle (VMConnect) ou connectez-vous via une connexion réseau.

Configuration requise :

  • La machine virtuelle doit s’exécuter localement sur l’hôte.
  • La machine virtuelle doit être activée et exécutée avec au moins un profil utilisateur configuré.
  • Vous devez être connecté à l’ordinateur hôte en tant qu’administrateur Hyper-V.
  • Vous devez fournir des informations d’identification utilisateur valides pour la machine virtuelle.

Créer et quitter une session PowerShell interactive

Le moyen le plus simple d’exécuter des commandes PowerShell dans une machine virtuelle consiste à démarrer une session interactive.

Au démarrage de la session, les commandes que vous tapez s’exécutent sur la machine virtuelle, comme si vous les avez tapées directement dans une session PowerShell sur la machine virtuelle elle-même.

Pour démarrer une session interactive :

  1. Sur l’hôte Hyper-V, ouvrez PowerShell en tant qu’administrateur.

  2. Exécutez l’une des commandes suivantes pour créer une session interactive à l’aide du nom ou du GUID de la machine virtuelle :

    Enter-PSSession -VMName <VMName>
    Enter-PSSession -VMId <VMId>
    

    Entrez les informations d’identification de la machine virtuelle lorsque vous y êtes invité.

  3. Exécutez des commandes sur votre machine virtuelle. Vous devez voir vmName comme préfixe pour votre invite PowerShell comme suit :

    [VMName]: PS C:\>
    

    Toute commande que vous exécutez s’exécute sur votre machine virtuelle. Pour tester, exécuter ipconfig ou hostname vérifier que ces commandes s’exécutent sur la machine virtuelle.

  4. Lorsque vous avez terminé, exécutez la commande suivante pour fermer la session :

     Exit-PSSession 
    

Note

Si votre session ne se connecte pas, consultez la résolution des problèmes pour les causes potentielles.

Pour en savoir plus sur ces applets de commande, consultez Enter-PSSession et Exit-PSSession.

Exécuter un script ou une commande avec Invoke-Command

PowerShell Direct avec Invoke-Command est parfait pour les situations où vous devez exécuter une commande ou un script sur une machine virtuelle, mais n’avez pas besoin de continuer à interagir avec la machine virtuelle au-delà de ce point.

Pour exécuter une seule commande :

  1. Sur l’hôte Hyper-V, ouvrez PowerShell en tant qu’administrateur.

  2. Exécutez l’une des commandes suivantes pour créer une session à l’aide du nom ou du GUID de la machine virtuelle :

    Invoke-Command -VMName <VMName> -ScriptBlock { command } 
    Invoke-Command -VMId <VMId> -ScriptBlock { command }
    

    Entrez les informations d’identification de la machine virtuelle lorsque vous y êtes invité.

    La commande s’exécute sur la machine virtuelle. Si la commande génère une sortie, vous la voyez dans votre console. La connexion se ferme automatiquement dès que la commande s’exécute.

Pour exécuter un script :

  1. Sur l’hôte Hyper-V, ouvrez PowerShell en tant qu’administrateur.

  2. Exécutez l’une des commandes suivantes pour créer une session à l’aide du nom ou du GUID de la machine virtuelle :

    Invoke-Command -VMName <VMName> -FilePath C:\host\script_path\script.ps1 
    Invoke-Command -VMId <VMId> -FilePath C:\host\script_path\script.ps1 
    

    Entrez les informations d’identification de la machine virtuelle lorsque vous y êtes invité.

    Le script s’exécute sur la machine virtuelle. La connexion se ferme automatiquement dès que la commande s’exécute.

Pour plus d’informations sur cette applet de commande, consultez Invoke-Command.

Copier des fichiers avec New-PSSession et Copy-Item

Note

PowerShell Direct prend uniquement en charge les sessions persistantes dans les builds Windows 14280 et ultérieures

Les sessions PowerShell persistantes sont extrêmement utiles lors de l’écriture de scripts qui coordonnent des actions sur une ou plusieurs machines distantes. Une fois créées, les sessions persistantes existent en arrière-plan jusqu’à ce que vous décidiez de les supprimer. Cela signifie que vous pouvez référencer la même session avec Invoke-Command ou Enter-PSSession sans passer d’informations d’identification.

Par le même jeton, les sessions contiennent l’état. Étant donné que les sessions persistantes persistent, toutes les variables que vous créez dans une session ou passent à une session sont conservées sur plusieurs appels. Vous pouvez utiliser un certain nombre d’outils pour travailler avec des sessions persistantes. Pour cet exemple, utilisez New-PSSession et Copy-Item pour déplacer des données de l’hôte vers une machine virtuelle et d’une machine virtuelle vers l’hôte.

Pour créer une session, copiez ensuite des fichiers :

  1. Sur l’hôte Hyper-V, ouvrez PowerShell en tant qu’administrateur.

  2. Exécutez l’une des commandes suivantes pour créer une session PowerShell persistante sur la machine virtuelle à l’aide New-PSSessionde .

    $s = New-PSSession -VMName <VMName> -Credential (Get-Credential)
    $s = New-PSSession -VMId <VMId> -Credential (Get-Credential)
    

    Entrez les informations d’identification de la machine virtuelle lorsque vous y êtes invité.

    Avertissement

    Il existe un bogue dans les builds avant 14500. Si vous ne spécifiez pas explicitement d’informations d’identification avec l’indicateur -Credential , le service dans l’invité se bloque et doit être redémarré. Si vous rencontrez ce problème, consultez la section Erreur : une session à distance peut avoir pris fin pour obtenir des instructions de contournement.

  3. Copiez un fichier dans la machine virtuelle.

    Pour copier C:\host_path\data.txt vers la machine virtuelle à partir de l’ordinateur hôte, exécutez :

    Copy-Item -ToSession $s -Path C:\host_path\data.txt -Destination C:\guest_path\
    
  4. Copiez un fichier à partir de la machine virtuelle (sur l’hôte).

    Pour copier C:\guest_path\data.txt vers l’hôte à partir de la machine virtuelle, exécutez :

    Copy-Item -FromSession $s -Path C:\guest_path\data.txt -Destination C:\host_path\
    
  5. Arrêtez la session persistante à l’aide de Remove-PSSession.

    Remove-PSSession $s
    

Résolution des problèmes

PowerShell Direct expose un petit ensemble de messages d’erreur courants. Les sections suivantes décrivent les messages d’erreur les plus courants, certaines causes et outils pour diagnostiquer les problèmes.

-VMName ou -VMID paramètres n’existent pas

Problème:

Enter-PSSession, Invoke-Commandou New-PSSession n’a pas de -VMName-VMId paramètre.

Causes potentielles :

Le problème le plus probable est que votre système d’exploitation hôte ne prend pas en charge PowerShell Direct.

Vous pouvez vérifier votre build Windows en exécutant la commande suivante :

[System.Environment]::OSVersion.Version

Si vous exécutez une build prise en charge, il est également possible que votre version de PowerShell ne prend pas en charge PowerShell Direct. Pour PowerShell Direct et JEA, la version principale doit être 5 ou ultérieure.

Vous pouvez vérifier votre build de version PowerShell en exécutant la commande suivante :

$PSVersionTable.PSVersion

Erreur : une session à distance peut avoir pris fin

Note

Pour Enter-PSSession entre les builds hôtes 10240 et 12400, toutes les erreurs indiquent que « Une session à distance peut avoir pris fin ».

Message d'erreur:

Enter-PSSession : une erreur s’est produite que Windows PowerShell ne peut pas traiter. Une session à distance peut avoir pris fin.

Causes potentielles :

  • La machine virtuelle existe, mais n’est pas en cours d’exécution.
  • Le système d’exploitation invité ne prend pas en charge PowerShell Direct. Consultez les conditions requises.
  • PowerShell n’est pas encore disponible dans l’invité
    • Le système d’exploitation n’a pas terminé le démarrage
    • Le système d’exploitation ne peut pas démarrer correctement
    • Un événement de temps de démarrage nécessite une entrée utilisateur

Utilisez l’applet de commande Get-VM pour vérifier quelles machines virtuelles s’exécutent sur l’hôte.

Message d'erreur:

New-PSSession : une erreur s’est produite que Windows PowerShell n'est pas en mesure de gérer. Une session à distance peut avoir pris fin.

Causes potentielles :

  • Une des raisons répertoriées précédemment - elles s’appliquent tous à New-PSSession
  • Il y a un bogue dans les versions actuelles où vous devez transmettre explicitement les informations d’identification avec -Credential. Lorsque ce bogue se produit, l’ensemble du service se bloque dans le système d’exploitation invité et doit être redémarré. Vous pouvez vérifier si la session est toujours disponible avec Enter-PSSession.

Pour contourner le problème d’informations d’identification, connectez-vous à la machine virtuelle à l’aide de VMConnect, ouvrez PowerShell et redémarrez le service vmicvmsession avec la commande PowerShell suivante :

Restart-Service -Name vmicvmsession

Erreur : Impossible de résoudre le jeu de paramètres

Message d'erreur:

Enter-PSSession : l'ensemble de paramètres ne peut pas être déterminé à l’aide des paramètres nommés spécifiés.

Causes potentielles :

  • Vous ne pouvez pas utiliser -RunAsAdministrator lors de la connexion à des machines virtuelles.

    Lors de la connexion à un conteneur Windows, l’indicateur -RunAsAdministrator autorise les connexions d’administrateur sans informations d’identification explicites. Étant donné que les machines virtuelles ne donnent pas à l’hôte un accès administrateur implicite, vous devez entrer explicitement les informations d’identification.

Vous pouvez transmettre des informations d’identification d’administrateur à la machine virtuelle avec le -Credential paramètre ou en les entrant manuellement lorsque vous y êtes invité.

Erreur : les informations d’identification ne sont pas valides

Message d'erreur:

Enter-PSSession : les informations d’identification ne sont pas valides.

Causes potentielles :

  • Les informations d’identification de l’invité n’ont pas pu être validées
    • Les informations d’identification fournies étaient incorrectes.
    • Il n’existe aucun compte d’utilisateur dans l’invité (le système d’exploitation n’a pas démarré avant)
    • Si vous vous connectez en tant qu’administrateur : l’administrateur n’est pas défini en tant qu’utilisateur actif. Pour plus d’informations, consultez Activer et désactiver le compte administrateur intégré.

Erreur : le paramètre VMName d’entrée ne se résout pas sur une machine virtuelle.

Message d'erreur:

Enter-PSSession : le paramètre VMName d’entrée ne se résout pas sur une machine virtuelle.

Causes potentielles :

  • Vous n’êtes pas administrateur Hyper-V.
  • La machine virtuelle n’existe pas.

Utilisez l’applet de commande Get-VM pour vérifier que les informations d’identification que vous utilisez ont le rôle d’administrateur Hyper-V et pour voir quelles machines virtuelles s’exécutent localement sur l’hôte et démarrées.

Exemples et guides utilisateur

PowerShell Direct prend en charge Just Enough Administration (JEA).

Consultez des exemples sur GitHub.