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 autant que possible travailler 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, voir about_Remote_Requirements.
Les deux ordinateurs doivent-ils avoir installé PowerShell ?
Oui. Pour travailler à distance, les ordinateurs locaux et distants doivent disposer de PowerShell, de Microsoft .NET Framework et des services web pour la gestion (WS-Management). Tous les fichiers et autres ressources nécessaires pour exécuter 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 à distance et exécuter des commandes distantes. Toutefois, certaines fonctionnalités, telles que la possibilité de se déconnecter d’une session et de se reconnecter à celle-ci, 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 le Registre sur l’ordinateur distant.
Pour plus d'informations, voir about_Remote_Requirements.
Comment fonctionne la communication à distance ?
Lorsque vous envoyez une commande distante, la commande est transmise sur 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 WS-Management protocole 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 à une autre session ou à 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ées.
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 Invoke-Command
, New-PSSession
et Enter-PSSession
lors de l’établissement d’une connexion. Cette option utilise le canal HTTPS plus sécurisé au lieu de HTTP.
Toutes les commandes distantes nécessitent-elles une communication à distance PowerShell ?
Non. Certaines 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. Par conséquent, vous pouvez 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 aux exigences de la communication à distance PowerShell.
Ces applets de commande incluent les éléments suivants :
Get-HotFix
Rename-Computer
Restart-Computer
Stop-Computer
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-HotFix -Parameter ComputerName
Pour toutes les autres commandes, utilisez l’applet de commande Invoke-Command
.
Comment exécuter une commande sur un ordinateur distant ?
Pour exécuter une commande sur un ordinateur distant, utilisez l’applet de commande Invoke-Command
.
Placez votre commande dans des accolades ({}
) pour le rendre 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 persistante à 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 commande Get-Process
à 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 transmise à l’ordinateur distant, où elle met fin à la commande distante.
Pour plus d’informations sur les commandes distantes, consultez about_Remote et les rubriques d’aide pour les applets de commande qui prennent en charge la communication à distance.
Puis-je simplement telnet dans un ordinateur distant ?
Vous pouvez utiliser l’applet de commande Enter-PSSession
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 mettre fin à la session interactive, tapez :
Exit-PSSession
Une session interactive est une session persistante qui utilise le protocole WS-Management. Il n’est pas identique à l’utilisation de Telnet, mais il offre une expérience similaire.
Pour plus d’informations, consultez Enter-PSSession
.
Puis-je créer une connexion persistante ?
Oui. Vous pouvez exécuter des commandes distantes en spécifiant le nom de l’ordinateur distant, son nom NetBIOS ou son adresse IP. Vous pouvez également exécuter des commandes distantes en spécifiant une session PowerShell (PSSession) connectée à l’ordinateur distant.
Lorsque vous utilisez le paramètre ComputerName de Invoke-Command
ou de Enter-PSSession
, PowerShell établit une connexion temporaire. PowerShell utilise la connexion pour exécuter uniquement la commande active, 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 de commande New-PSSession
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 les 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 de commande Invoke-Command
accepte plusieurs noms d’ordinateurs, et le paramètre Session accepte plusieurs sessions PSSession.
Lorsque vous exécutez une commande Invoke-Command
, PowerShell exécute les commandes sur tous les ordinateurs spécifiés ou dans toutes les sessions PSSession spécifiées.
PowerShell peut gérer des centaines de connexions distantes simultanées. Toutefois, le nombre de commandes distantes 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 que le profil ajoute ne sont pas présentes dans la session. En outre, la variable automatique $PROFILE
n’est pas remplie dans les sessions à distance.
Pour exécuter un profil dans une session, utilisez l’applet de commande Invoke-Command
.
Par exemple, la commande suivante exécute le profil CurrentUserCurrentHost à partir de l’ordinateur local de 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 variable $PROFILE
n’est pas remplie, la commande utilise le chemin explicite du profil.
Invoke-Command -Session $s {
. "$HOME\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1"
}
Après avoir exécuté 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 la limitation fonctionne-t-elle sur les commandes distantes ?
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 psSessions, 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 diffère-t-elle de la sortie locale ?
Lorsque vous utilisez PowerShell localement, vous envoyez et recevez des objets .NET Framework « en direct » ; Les objets « en direct » sont des objets associés à des programmes ou composants système réels. Lorsque vous appelez les méthodes ou modifiez les propriétés des objets actifs, 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ésentent changent également.
Toutefois, étant donné que la plupart des objets actifs ne peuvent pas être transmis sur le réseau, PowerShell « sérialise » la plupart des objets envoyés dans des commandes distantes, autrement dit, 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 code XML en un 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 à l’heure précédente, mais il n’est plus « actif », autrement dit, il n’est plus directement associé au composant. Et les méthodes sont supprimées, car elles ne sont plus efficaces.
En règle générale, vous pouvez utiliser des objets désérialisés comme vous l’utiliseriez, mais vous devez connaître leurs limitations. En outre, les objets retournés par l’applet de commande Invoke-Command
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 convertis en objets actifs lorsqu’ils sont reçus. Ces objets n’ont pas besoin d’une gestion ou d’une mise en forme particulières.
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 que le travail s’exécute 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 si d’autres commandes s’exécutent, 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 de commande Invoke-Command
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 commande Start-Job
à distance.
Pour plus d’informations sur les travaux en arrière-plan dans PowerShell, consultez about_Jobs et about_Remote_Jobs.
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 pour n’importe quel programme 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 que vous appuyez sur ctrl+C pour interrompre la commande. Par exemple, si vous exécutez le programme Ipconfig.exe
sur un ordinateur distant, l’invite de commandes ne retourne pas tant que Ipconfig.exe
n’est pas terminée.
Si vous utilisez des commandes distantes 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 appuyez sur Ctrl+C, ce qui interrompt la commande et arrête le processus.
Par exemple, si vous utilisez une commande PowerShell pour 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 à distance 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 les commandes qu’ils peuvent exécuter.
Une configuration de session configure l’environnement de 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. Et la configuration peut inclure des paramètres qui protègent l’ordinateur, tels que les paramètres qui limitent la quantité de données que la session peut recevoir à distance dans un seul objet ou commande. Vous pouvez également spécifier un descripteur de sécurité qui détermine les autorisations requises pour utiliser la configuration.
L’applet de commande Enable-PSRemoting
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é pour la configuration afin d’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.
À compter de Windows PowerShell 3.0, l’applet de commande New-PSSessionConfigurationFile
vous permet de créer des configurations de session personnalisées à l’aide d’un fichier texte. Le fichier inclut des options pour définir le mode de langage et spécifier les applets de commande et les modules disponibles dans les sessions qui utilisent la configuration de session.
Lorsque les utilisateurs utilisent le Invoke-Command
, New-PSSession
ou les applets de commande Enter-PSSession
, ils peuvent utiliser le paramètre ConfigurationName pour indiquer la configuration de session utilisée pour la session. Ils peuvent également modifier la configuration par défaut utilisée par leurs sessions en modifiant la valeur de la variable de préférence $PSSessionConfigurationName
dans la session.
Pour plus d’informations sur les configurations de session, consultez l’aide pour les applets de commande de configuration de session. Pour rechercher les applets de commande de configuration de session, tapez :
Get-Command *PSSessionConfiguration
Qu’est-ce que les configurations de ventilateur dans et de fan out ?
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 exécutant 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 de ventilateur et de ventilateur.
Pour la configuration du ventilateur, PowerShell utilise le protocole Services web pour la gestion (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 configuration de session secondaire et d’autres fonctionnalités pour personnaliser la connexion à distance.
Pour prendre en charge la configuration « 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 du ventilateur ne sont pas pris en charge dans Windows XP ou dans Windows Server 2003.
Dans une configuration de ventilateur, l’utilisateur peut spécifier un URI de connexion et un point de terminaison HTTP, notamment le transport, le nom de l’ordinateur, le port et le nom de l’application. IIS transfère toutes les requêtes avec 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 non dans un domaine ?
Oui. La communication à distance PowerShell est disponible même si l’ordinateur local n’est pas dans un domaine. Vous pouvez utiliser les fonctionnalités de communication à distance pour vous connecter à des 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 distantes 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 sur le 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 :
Créez 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 : partage et modèle de sécurité pour les comptes locaux » est « Classique ». Vérifiez le paramètre au cas où il a changé.
Puis-je exécuter des commandes distantes sur un ordinateur d’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 du Invoke-Command
, New-PSSession
ou Enter-PSSession
applets de commande pour fournir les informations d’identification d’un membre du groupe Administrateurs sur l’ordinateur distant. Cela est parfois nécessaire même lorsque l’utilisateur actuel est membre du groupe Administrateurs sur les ordinateurs locaux et distants.
Toutefois, si l’ordinateur distant n’est pas dans un domaine approuvé par l’ordinateur local, l’ordinateur distant 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 la section Communication à distance de PowerShell via SSH.