Exécution de commandes à distance

Vous pouvez exécuter des commandes sur un ordinateur ou plusieurs centaines au moyen d'une seule commande PowerShell. Pour communiquer à distance, Windows PowerShell fait appel à différentes technologies, notamment WMI, RPC et WS-Management.

PowerShell prend en charge WMI, WS-Management et la communication à distance SSH. Dans PowerShell 7 et versions ultérieures, RPC est pris en charge uniquement sur Windows.

Pour plus d’informations sur la communication à distance dans PowerShell, consultez les articles suivants :

Communication à distance Windows PowerShell sans configuration

De nombreuses cmdlets Windows PowerShell disposent du paramètre ComputerName permettant de collecter des données et de modifier des paramètres sur un ou plusieurs ordinateurs distants. Ces cmdlets utilisent différents protocoles de communication et fonctionnent sur tous les systèmes d’exploitation Windows sans configuration spéciale.

Ces applets de commande sont les suivantes :

En général, les cmdlets qui prennent en charge la communication à distance sans configuration particulière disposent du paramètre ComputerName, mais pas du paramètre Session. Pour trouver ces applets de commande dans votre session, tapez :

Get-Command | Where-Object {
    $_.Parameters.Keys -contains "ComputerName" -and
    $_.Parameters.Keys -notcontains "Session"
}

Accès distant Windows PowerShell

La communication à distance Windows PowerShell, qui utilise le protocole WS-Management, vous permet d'exécuter n'importe quelle commande Windows PowerShell sur un ou plusieurs ordinateurs distants. Vous pouvez établir des connexions persistantes, démarrer des sessions interactives et exécuter des scripts sur ordinateurs distants.

Pour utiliser la communication à distance Windows PowerShell, l'ordinateur distant doit être configuré pour la gestion à distance. Pour obtenir plus d’informations, notamment des instructions, voir about_Remote_Requirements.

Après avoir configuré la communication à distance Windows PowerShell, vous avez le choix entre plusieurs stratégies de communication à distance. Cet article en répertorie quelques-unes. Pour plus d’informations, consultez À propos de la communication à distance.

Démarrer une session interactive

Pour démarrer une session interactive avec un seul ordinateur distant, utilisez l’applet de commande Enter-PSSession. Par exemple, pour démarrer une session interactive avec l'ordinateur distant Server01, tapez :

Enter-PSSession Server01

L'invite de commandes affiche alors le nom de l'ordinateur distant. Toutes les commandes que vous tapez à l'invite sont exécutées sur l'ordinateur distant et les résultats sont affichés sur l'ordinateur local.

Pour terminer la session interactive, tapez :

Exit-PSSession

Pour plus d’informations sur les applets de commande Enter-PSSession et Exit-PSSession, consultez :

Exécuter une commande à distance

Pour exécuter une commande sur un ou plusieurs ordinateurs, utilisez la cmdlet Invoke-Command. Par exemple, pour exécuter une commande Get-UICulture sur les ordinateurs distants Serveur01 et Serveur02, tapez :

Invoke-Command -ComputerName Server01, Server02 -ScriptBlock {Get-UICulture}

La sortie est retournée à votre ordinateur.

LCID    Name     DisplayName               PSComputerName
----    ----     -----------               --------------
1033    en-US    English (United States)   server01.corp.fabrikam.com
1033    en-US    English (United States)   server02.corp.fabrikam.com

Exécuter un script

Pour exécuter un script sur un ou plusieurs ordinateurs distants, utilisez le paramètre FilePath de l’applet de commande Invoke-Command. Le script doit être accessible à votre ordinateur local ou se trouver sur celui-ci. Les résultats sont retournés à votre ordinateur local.

Par exemple, la commande suivante exécute le script DiskCollect.ps1 sur les ordinateurs distants Server01 et Server02.

Invoke-Command -ComputerName Server01, Server02 -FilePath c:\Scripts\DiskCollect.ps1

Établir une connexion persistante

Utilisez la cmdlet New-PSSession pour créer une session persistante sur un ordinateur distant. L’exemple suivant crée des sessions distantes sur Server01 et Server02. Les objets de session sont stockés dans la variable $s.

$s = New-PSSession -ComputerName Server01, Server02

Une fois les sessions établies, vous pouvez exécuter n'importe quelle commande dans celles-ci. Les sessions étant persistantes, vous pouvez collecter des données à partir d’une seule commande et les utiliser dans une autre commande.

Par exemple, la commande suivante exécute une commande Get-HotFix dans les sessions dans la variable $s et enregistre les résultats dans la variable $h. La variable $h est créée dans chacune des sessions dans $s, mais elle n’existe pas dans la session locale.

Invoke-Command -Session $s {$h = Get-HotFix}

Vous pouvez désormais utiliser les données dans la variable $h avec d’autres commandes dans la même session. Les résultats sont affichés sur l'ordinateur local. Par exemple :

Invoke-Command -Session $s {$h | where {$_.InstalledBy -ne "NT AUTHORITY\SYSTEM"}}

Communication à distance avancée

PowerShell inclut des applets de commande qui vous permettent de :

  • Configurer et créer des sessions distantes à partir des extrémités locales et distantes
  • Créer des sessions personnalisées et restreintes
  • Importer des commandes à partir d’une session distante qui s’exécutent implicitement sur la session à distance
  • Configurer la sécurité d’une session à distance

PowerShell sur Windows inclut un fournisseur WSMan. Le fournisseur crée un lecteur WSMAN: qui vous permet de parcourir une hiérarchie de paramètres de configuration sur l'ordinateur local et les ordinateurs distants.

Pour plus d’informations sur le fournisseur WSMan, consultez Fournisseur WSMan et À propos des cmdlets WS-Management ou tapez Get-Help wsman dans la console Windows PowerShell.

Pour plus d’informations, consultez l’article suivant :

Pour obtenir de l’aide sur les erreurs de communication à distance, voir about_Remote_Troubleshooting.

Voir aussi