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 :
- Restart-Computer
- Test-Connection
- Clear-EventLog
- Get-EventLog
- Get-HotFix
- Get-Process
- Get-Service
- Set-Service
- Get-WinEvent
- Get-WmiObject
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 :
- Questions fréquentes (FAQ) sur la communication à distance PowerShell
- Register-PSSessionConfiguration
- Import-PSSession
Pour obtenir de l’aide sur les erreurs de communication à distance, voir about_Remote_Troubleshooting.