about_Remote
Description courte
Contient des questions et des réponses sur l’exécution de commandes à distance dans PowerShell.
Description longue
Lorsque vous travaillez à distance, vous tapez des commandes dans PowerShell sur un ordinateur (appelé « ordinateur local »), mais les commandes s’exécutent sur un autre ordinateur (appelé « ordinateur distant »). L’expérience de travail à distance doit être aussi similaire que possible au travail directement sur l’ordinateur distant.
Remarque : Pour utiliser la communication à distance PowerShell, l’ordinateur distant doit être configuré pour la communication à distance. Pour plus d'informations, consultez about_Remote_Requirements.
PowerShell doit-il être installé sur les deux ordinateurs ?
Oui. Pour travailler à distance, les ordinateurs locaux et distants doivent avoir PowerShell, Microsoft .NET Framework et le protocole Web Services for Management (WS-Management). Tous les fichiers et autres ressources nécessaires à l’exécution d’une commande particulière doivent se trouver sur l’ordinateur distant.
Les ordinateurs exécutant Windows PowerShell 3.0 et les ordinateurs exécutant Windows PowerShell 2.0 peuvent se connecter les uns aux autres à distance et exécuter des commandes à distance. Toutefois, certaines fonctionnalités, telles que la possibilité de se déconnecter d’une session et de s’y reconnecter, fonctionnent uniquement lorsque les deux ordinateurs exécutent Windows PowerShell 3.0.
Vous devez avoir l’autorisation de vous connecter à l’ordinateur distant, l’autorisation d’exécuter PowerShell et l’autorisation d’accéder aux magasins de données (tels que les fichiers et dossiers) et au Registre sur l’ordinateur distant.
Pour plus d'informations, consultez about_Remote_Requirements.
Comment fonctionne la communication à distance ?
Lorsque vous envoyez une commande à distance, la commande est transmise via le réseau au moteur PowerShell sur l’ordinateur distant et s’exécute dans le client PowerShell sur l’ordinateur distant. Les résultats de la commande sont renvoyés à l’ordinateur local et apparaissent dans la session PowerShell sur l’ordinateur local.
Pour transmettre les commandes et recevoir la sortie, PowerShell utilise le protocole WS-Management. Pour plus d’informations sur le protocole WS-Management, consultez Protocole WS-Management dans la documentation Windows.
À compter de Windows PowerShell 3.0, les sessions à distance sont stockées sur l’ordinateur distant. Cela vous permet de vous déconnecter de la session et de vous reconnecter à partir d’une autre session ou d’un autre ordinateur sans interrompre les commandes ou perdre l’état.
La communication à distance PowerShell est-elle sécurisée ?
Lorsque vous vous connectez à un ordinateur distant, le système utilise les informations d’identification de nom d’utilisateur et de mot de passe sur l’ordinateur local ou les informations d’identification que vous fournissez dans la commande pour vous connecter à l’ordinateur distant. Les informations d’identification et le reste de la transmission sont chiffrés.
Pour ajouter une protection supplémentaire, vous pouvez configurer l’ordinateur distant pour qu’il utilise SSL (Secure Sockets Layer) au lieu de HTTP pour écouter les requêtes Windows Remote Management (WinRM). Ensuite, les utilisateurs peuvent utiliser le paramètre UseSSL des applets de commande , New-PSSession
et Enter-PSSession
lors de l’établissement Invoke-Command
d’une connexion. Cette option utilise le canal HTTPS plus sécurisé au lieu de HTTP.
Toutes les commandes à distance nécessitent-elles une communication à distance PowerShell ?
Non. Plusieurs applets de commande ont un paramètre ComputerName qui vous permet d’obtenir des objets à partir de l’ordinateur distant.
Ces applets de commande n’utilisent pas la communication à distance PowerShell. Vous pouvez donc les utiliser sur n’importe quel ordinateur exécutant PowerShell, même si l’ordinateur n’est pas configuré pour la communication à distance PowerShell ou si l’ordinateur ne répond pas à la configuration requise pour la communication à distance PowerShell.
Ces applets de commande incluent les éléments suivants :
Get-Process
Get-Service
Get-WinEvent
Get-EventLog
Test-Connection
Pour rechercher toutes les applets de commande avec un paramètre ComputerName , tapez :
Get-Help * -Parameter ComputerName
# or
Get-Command -ParameterName ComputerName
Pour déterminer si le paramètre ComputerName d’une applet de commande particulière nécessite la communication à distance PowerShell, consultez la description du paramètre. Pour afficher la description du paramètre, tapez :
Get-Help <cmdlet-name> -Parameter ComputerName
Par exemple :
Get-Help Get-Process -Parameter ComputerName
Pour toutes les autres commandes, utilisez l’applet de Invoke-Command
commande .
Comment faire exécuter une commande sur un ordinateur distant ?
Pour exécuter une commande sur un ordinateur distant, utilisez l’applet de Invoke-Command
commande .
Placez votre commande entre accolades ({}
) pour en faire un bloc de script. Utilisez le paramètre ScriptBlock de Invoke-Command
pour spécifier la commande .
Vous pouvez utiliser le paramètre ComputerName de Invoke-Command
pour spécifier un ordinateur distant. Vous pouvez également créer une connexion permanente à un ordinateur distant (une session), puis utiliser le paramètre Session de Invoke-Command
pour exécuter la commande dans la session.
Par exemple, les commandes suivantes exécutent une Get-Process
commande à distance.
Invoke-Command -ComputerName Server01, Server02 -ScriptBlock {Get-Process}
# - OR -
Invoke-Command -Session $s -ScriptBlock {Get-Process}
Pour interrompre une commande distante, tapez CTRL+C. La demande d’interruption est passée à l’ordinateur distant, où elle met fin à la commande distante.
Pour plus d’informations sur les commandes à distance, consultez about_Remote et les rubriques d’aide pour les applets de commande qui prennent en charge la communication à distance.
Puis-je simplement entrer telnet sur un ordinateur distant ?
Vous pouvez utiliser l’applet de Enter-PSSession
commande pour démarrer une session interactive avec un ordinateur distant.
À l’invite PowerShell, tapez :
Enter-PSSession <ComputerName>
L’invite de commandes change pour indiquer que vous êtes connecté à l’ordinateur distant.
<ComputerName>\C:>
À présent, les commandes que vous tapez s’exécutent sur l’ordinateur distant comme si vous les avez tapées directement sur l’ordinateur distant.
Pour terminer la session interactive, tapez :
Exit-PSSession
Une session interactive est une session persistante qui utilise le protocole WS-Management. Ce n’est pas la même chose que l’utilisation de Telnet, mais elle offre une expérience similaire.
Pour plus d’informations, consultez Enter-PSSession
.
Puis-je créer une connexion permanente ?
Oui. Vous pouvez exécuter des commandes à distance en spécifiant le nom de l’ordinateur distant, son nom NetBIOS ou son adresse IP. Vous pouvez également exécuter des commandes à distance en spécifiant une session PowerShell (PSSession) connectée à l’ordinateur distant.
Lorsque vous utilisez le paramètre ComputerName de Invoke-Command
ou Enter-PSSession
, PowerShell établit une connexion temporaire. PowerShell utilise la connexion pour exécuter uniquement la commande actuelle, puis ferme la connexion. Il s’agit d’une méthode très efficace pour exécuter une seule commande ou plusieurs commandes non liées, même sur de nombreux ordinateurs distants.
Lorsque vous utilisez l’applet New-PSSession
de commande pour créer une session PSSession, PowerShell établit une connexion persistante pour la session PSSession. Ensuite, vous pouvez exécuter plusieurs commandes dans la session PSSession, y compris des commandes qui partagent des données.
En règle générale, vous créez une session PSSession pour exécuter une série de commandes associées qui partagent des données. Sinon, la connexion temporaire créée par le paramètre ComputerName est suffisante pour la plupart des commandes.
Pour plus d’informations sur les sessions, consultez about_PSSessions.
Puis-je exécuter des commandes sur plusieurs ordinateurs à la fois ?
Oui. Le paramètre ComputerName de l’applet Invoke-Command
de commande accepte plusieurs noms d’ordinateurs et le paramètre Session accepte plusieurs PSSessions.
Lorsque vous exécutez une Invoke-Command
commande, PowerShell exécute les commandes sur tous les ordinateurs spécifiés ou dans tous les PSSessions spécifiés.
PowerShell peut gérer des centaines de connexions à distance simultanées. Toutefois, le nombre de commandes à distance que vous pouvez envoyer peut être limité par les ressources de votre ordinateur et sa capacité à établir et à gérer plusieurs connexions réseau.
Pour plus d’informations, consultez l’exemple dans la rubrique d’aide Invoke-Command
.
Où sont mes profils ?
Les profils PowerShell ne sont pas exécutés automatiquement dans les sessions à distance, de sorte que les commandes ajoutées par le profil ne sont pas présentes dans la session. En outre, la $profile
variable automatique n’est pas remplie dans les sessions à distance.
Pour exécuter un profil dans une session, utilisez l’applet de Invoke-Command
commande .
Par exemple, la commande suivante exécute le profil CurrentUserCurrentHost à partir de l’ordinateur local dans la session dans $s
.
Invoke-Command -Session $s -FilePath $profile
La commande suivante exécute le profil CurrentUserCurrentHost à partir de l’ordinateur distant dans la session dans $s
. Étant donné que la $profile
variable n’est pas renseignée, la commande utilise le chemin explicite du profil.
Invoke-Command -Session $s {
. "$home\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1"
}
Après l’exécution de cette commande, les commandes que le profil ajoute à la session sont disponibles dans $s
.
Vous pouvez également utiliser un script de démarrage dans une configuration de session pour exécuter un profil dans chaque session distante qui utilise la configuration de session.
Pour plus d’informations sur les profils PowerShell, consultez about_Profiles.
Pour plus d’informations sur les configurations de session, consultez Register-PSSessionConfiguration
.
Comment fonctionne la limitation sur les commandes à distance ?
Pour vous aider à gérer les ressources sur votre ordinateur local, PowerShell inclut une fonctionnalité de limitation par commande qui vous permet de limiter le nombre de connexions distantes simultanées établies pour chaque commande.
La valeur par défaut est 32 connexions simultanées, mais vous pouvez utiliser le paramètre ThrottleLimit des applets de commande pour définir une limite de limitation personnalisée pour des commandes particulières.
Lorsque vous utilisez la fonctionnalité de limitation, n’oubliez pas qu’elle est appliquée à chaque commande, et non à l’ensemble de la session ou à l’ordinateur. Si vous exécutez des commandes simultanément dans plusieurs sessions ou sessions PSSession, le nombre de connexions simultanées est la somme des connexions simultanées dans toutes les sessions.
Pour rechercher des applets de commande avec un paramètre ThrottleLimit , tapez :
Get-Help * -Parameter ThrottleLimit
-or-
Get-Command -ParameterName ThrottleLimit
La sortie des commandes distantes est-elle différente de la sortie locale ?
Lorsque vous utilisez PowerShell localement, vous envoyez et recevez des objets .NET Framework « actifs » ; Les objets « actifs » sont des objets qui sont associés à des programmes ou des composants système réels. Lorsque vous appelez les méthodes ou modifiez les propriétés d’objets dynamiques, les modifications affectent le programme ou le composant réel. Et, lorsque les propriétés d’un programme ou d’un composant changent, les propriétés de l’objet qui les représente changent également.
Toutefois, étant donné que la plupart des objets en direct ne peuvent pas être transmis sur le réseau, PowerShell « sérialise » la plupart des objets envoyés dans les commandes distantes, c’est-à-dire qu’il convertit chaque objet en une série d’éléments de données XML (Langage de contrainte dans XML [CLiXML]) pour la transmission.
Lorsque PowerShell reçoit un objet sérialisé, il convertit le XML en type d’objet désérialisé. L’objet désérialisé est un enregistrement précis des propriétés du programme ou du composant à un moment précédent, mais il n’est plus « actif », c’est-à-dire qu’il n’est plus directement associé au composant. Et les méthodes sont supprimées parce qu’elles ne sont plus efficaces.
En règle générale, vous pouvez utiliser des objets désérialisés comme vous le feriez pour des objets dynamiques, mais vous devez être conscient de leurs limitations. En outre, les objets retournés par l’applet de Invoke-Command
commande ont des propriétés supplémentaires qui vous aident à déterminer l’origine de la commande.
Certains types d’objets, tels que les objets DirectoryInfo et les GUID, sont reconvertis en objets actifs lorsqu’ils sont reçus. Ces objets n’ont pas besoin d’une gestion ou d’une mise en forme spéciale.
Pour plus d’informations sur l’interprétation et la mise en forme de la sortie distante, consultez about_Remote_Output.
Puis-je exécuter des travaux en arrière-plan à distance ?
Oui. Un travail en arrière-plan PowerShell est une commande PowerShell qui s’exécute de manière asynchrone sans interagir avec la session. Lorsque vous démarrez un travail en arrière-plan, l’invite de commandes retourne immédiatement et vous pouvez continuer à travailler dans la session pendant l’exécution du travail, même s’il s’exécute pendant une période prolongée.
Vous pouvez démarrer un travail en arrière-plan même lorsque d’autres commandes sont en cours d’exécution, car les travaux en arrière-plan s’exécutent toujours de manière asynchrone dans une session temporaire.
Vous pouvez exécuter des travaux en arrière-plan sur un ordinateur local ou distant. Par défaut, un travail en arrière-plan s’exécute sur l’ordinateur local. Toutefois, vous pouvez utiliser le paramètre AsJob de l’applet Invoke-Command
de commande pour exécuter n’importe quelle commande distante en tant que travail en arrière-plan. Vous pouvez également utiliser Invoke-Command
pour exécuter une Start-Job
commande à distance.
Pour plus d’informations sur les travaux en arrière-plan dans PowerShell , consultez [about_Jobs(about_Jobs.md)] et [about_Remote_Jobs(about_Remote_Jobs.md)].
Puis-je exécuter des programmes Windows sur un ordinateur distant ?
Vous pouvez utiliser des commandes à distance PowerShell pour exécuter des programmes Windows sur des ordinateurs distants. Par exemple, vous pouvez exécuter Shutdown.exe
ou Ipconfig.exe
sur un ordinateur distant.
Toutefois, vous ne pouvez pas utiliser les commandes PowerShell pour ouvrir l’interface utilisateur d’un programme quelconque sur un ordinateur distant.
Lorsque vous démarrez un programme Windows sur un ordinateur distant, la commande n’est pas terminée et l’invite de commandes PowerShell ne retourne pas tant que le programme n’est pas terminé ou jusqu’à ce que vous appuyiez sur CTRL+C pour interrompre la commande. Par exemple, si vous exécutez le Ipconfig.exe
programme sur un ordinateur distant, l’invite de commandes ne retourne pas tant que vous n’avez Ipconfig.exe
pas terminé.
Si vous utilisez des commandes à distance pour démarrer un programme doté d’une interface utilisateur, le processus du programme démarre, mais l’interface utilisateur n’apparaît pas. La commande PowerShell n’est pas terminée et l’invite de commandes ne retourne pas tant que vous n’avez pas arrêté le processus du programme ou que vous n’avez pas appuyé sur CTRL+C, ce qui interrompt la commande et arrête le processus.
Par exemple, si vous utilisez une commande PowerShell pour s’exécuter Notepad
sur un ordinateur distant, le processus du Bloc-notes démarre sur l’ordinateur distant, mais l’interface utilisateur du Bloc-notes n’apparaît pas. Pour interrompre la commande et restaurer l’invite de commandes, appuyez sur CTRL+C.
Puis-je limiter les commandes que les utilisateurs peuvent exécuter à distance sur mon ordinateur ?
Oui. Chaque session distante doit utiliser l’une des configurations de session sur l’ordinateur distant. Vous pouvez gérer les configurations de session sur votre ordinateur (et les autorisations pour ces configurations de session) pour déterminer qui peut exécuter des commandes à distance sur votre ordinateur et quelles commandes ils peuvent exécuter.
Une configuration de session configure l’environnement pour la session. Vous pouvez définir la configuration à l’aide d’un assembly qui implémente une nouvelle classe de configuration ou à l’aide d’un script qui s’exécute dans la session. La configuration peut déterminer les commandes disponibles dans la session. De plus, la configuration peut inclure des paramètres qui protègent l’ordinateur, tels que des paramètres qui limitent la quantité de données que la session peut recevoir à distance dans un objet ou une commande unique. Vous pouvez également spécifier un descripteur de sécurité qui détermine les autorisations requises pour utiliser la configuration.
L’applet Enable-PSRemoting
de commande crée les configurations de session par défaut sur votre ordinateur : Microsoft.PowerShell, Microsoft.PowerShell.Workflow et Microsoft.PowerShell32 (systèmes d’exploitation 64 bits uniquement). Enable-PSRemoting
définit le descripteur de sécurité de la configuration pour autoriser uniquement les membres du groupe Administrateurs sur votre ordinateur à les utiliser.
Vous pouvez utiliser les applets de commande de configuration de session pour modifier les configurations de session par défaut, créer de nouvelles configurations de session et modifier les descripteurs de sécurité de toutes les configurations de session.
À partir de Windows PowerShell 3.0, l’applet de commande vous permet de créer des configurations de session personnalisées à l’aide New-PSSessionConfigurationFile
d’un fichier texte. Le fichier comprend des options permettant de définir le mode de langue et de spécifier les applets de commande et les modules disponibles dans les sessions qui utilisent la configuration de session.
Lorsque les utilisateurs utilisent les Invoke-Command
applets de commande , New-PSSession
ou Enter-PSSession
, ils peuvent utiliser le paramètre ConfigurationName pour indiquer la configuration de session utilisée pour la session. De plus, ils peuvent modifier la configuration par défaut que leurs sessions utilisent en modifiant la valeur de la $PSSessionConfigurationName
variable de préférence dans la session.
Pour plus d’informations sur les configurations de session, consultez l’aide sur les applets de commande de configuration de session. Pour rechercher les applets de commande de configuration de session, tapez :
Get-Command *PSSessionConfiguration
Que sont les configurations de ventilateur entrant et de sortie de ventilateur ?
Le scénario de communication à distance PowerShell le plus courant impliquant plusieurs ordinateurs est la configuration un-à-plusieurs, dans laquelle un ordinateur local (l’ordinateur de l’administrateur) exécute des commandes PowerShell sur de nombreux ordinateurs distants. C’est ce qu’on appelle le scénario « fan-out ».
Toutefois, dans certaines entreprises, la configuration est plusieurs-à-un, où de nombreux ordinateurs clients se connectent à un seul ordinateur distant qui exécute PowerShell, tel qu’un serveur de fichiers ou un kiosque. Il s’agit de la configuration « fan-in ».
La communication à distance PowerShell prend en charge les configurations fan-out et fan-in.
Pour la configuration de fan-out, PowerShell utilise le protocole Web Services for Management (WS-Management) et le service WinRM qui prend en charge l’implémentation Microsoft de WS-Management. Lorsqu’un ordinateur local se connecte à un ordinateur distant, WS-Management établit une connexion et utilise un plug-in pour PowerShell pour démarrer le processus hôte PowerShell (Wsmprovhost.exe) sur l’ordinateur distant. L’utilisateur peut spécifier un autre port, une autre configuration de session et d’autres fonctionnalités pour personnaliser la connexion à distance.
Pour prendre en charge la configuration du « fan-in », PowerShell utilise Internet Information Services (IIS) pour héberger WS-Management, charger le plug-in PowerShell et démarrer PowerShell. Dans ce scénario, au lieu de démarrer chaque session PowerShell dans un processus distinct, toutes les sessions PowerShell s’exécutent dans le même processus hôte.
L’hébergement IIS et la gestion à distance par fan-in ne sont pas pris en charge dans Windows XP ou Windows Server 2003.
Dans une configuration fan-in, l’utilisateur peut spécifier un URI de connexion et un point de terminaison HTTP, y compris le transport, le nom de l’ordinateur, le port et le nom de l’application. IIS transfère toutes les requêtes portant un nom d’application spécifié à l’application. La valeur par défaut est WS-Management, qui peut héberger PowerShell.
Vous pouvez également spécifier un mécanisme d’authentification et interdire ou autoriser la redirection à partir de points de terminaison HTTP et HTTPS.
Puis-je tester la communication à distance sur un seul ordinateur qui n’est pas dans un domaine ?
Oui. La communication à distance PowerShell est disponible même lorsque l’ordinateur local n’est pas dans un domaine. Vous pouvez utiliser les fonctionnalités de communication à distance pour vous connecter aux sessions et créer des sessions sur le même ordinateur. Les fonctionnalités fonctionnent de la même façon que lorsque vous vous connectez à un ordinateur distant.
Pour exécuter des commandes à distance sur un ordinateur d’un groupe de travail, modifiez les paramètres Windows suivants sur l’ordinateur.
Attention : ces paramètres affectent tous les utilisateurs du système et peuvent rendre le système plus vulnérable à une attaque malveillante. Soyez prudent lorsque vous apportez ces modifications.
Windows Vista, Windows 7, Windows 8 :
Create l’entrée de Registre suivante, puis définissez sa valeur sur 1 : LocalAccountTokenFilterPolicy dans
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System
Vous pouvez utiliser la commande PowerShell suivante pour ajouter cette entrée :
$parameters = @{ Path='HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System' Name='LocalAccountTokenFilterPolicy' propertyType='DWord' Value=1 } New-ItemProperty @parameters
Windows Server 2003, Windows Server 2008, Windows Server 2012, Windows Server 2012 R2 :
Aucune modification n’est nécessaire, car le paramètre par défaut de la stratégie « Accès réseau : modèle de partage et de sécurité pour les comptes locaux » est « Classique ». Vérifiez le paramètre en cas de modification.
Puis-je exécuter des commandes à distance sur un ordinateur dans un autre domaine ?
Oui. En règle générale, les commandes s’exécutent sans erreur, même si vous devrez peut-être utiliser le paramètre Credential des applets de Invoke-Command
commande , New-PSSession
ou Enter-PSSession
pour fournir les informations d’identification d’un membre du groupe Administrateurs sur l’ordinateur distant. Cela est parfois obligatoire même lorsque l’utilisateur actuel est membre du groupe Administrateurs sur les ordinateurs locaux et distants.
Toutefois, si l’ordinateur distant ne se trouve pas dans un domaine approuvé par l’ordinateur local, il peut ne pas être en mesure d’authentifier les informations d’identification de l’utilisateur.
Pour activer l’authentification, utilisez la commande suivante pour ajouter l’ordinateur distant à la liste des hôtes approuvés pour l’ordinateur local dans WinRM. Tapez la commande à l’invite PowerShell.
Set-Item WSMan:\localhost\Client\TrustedHosts -Value <Remote-computer-name>
Par exemple, pour ajouter l’ordinateur Server01 à la liste des hôtes approuvés sur l’ordinateur local, tapez la commande suivante à l’invite PowerShell :
Set-Item WSMan:\localhost\Client\TrustedHosts -Value Server01
PowerShell prend-il en charge la communication à distance via SSH ?
Oui. Pour plus d’informations, consultez Communication à distance PowerShell via SSH.