RUBRIQUE about_Remote_FAQ DESCRIPTION COURTE Contient des questions et réponses sur l'exécution des commandes distantes dans Windows PowerShell. DESCRIPTION LONGUE Lorsque vous travaillez à distance, vous tapez des commandes dans Windows PowerShell sur un ordinateur (appelé " ordinateur local "), mais les commandes sont exécutées sur un autre ordinateur (appelé " ordinateur distant "). En fait, il doit vous sembler autant que possible que vous travaillez directement sur l'ordinateur distant. Remarque : pour utiliser la communication à distance Windows PowerShell, l'ordinateur distant doit être configuré pour cette fonction. Pour plus d'informations, consultez about_Remote_Require ments. EST-CE QUE WINDOWS POWERSHELL DOIT ÊTRE INSTALLÉ SUR LES DEUX ORDINATEURS ? Oui. Pour travailler à distance, Windows PowerShell, Microsoft .NET Framework 2.0 et le protocole des services Web pour la gestion (Gestion des services Web) doivent être installés sur les ordinateurs local et distant. Tous les fichiers et autres ressources nécessaires pour exécuter une commande particulière doivent être sur l'ordinateur distant. Vous devez avoir les autorisations de vous connecter à l'ordinateur distant, d'exécuter Windows PowerShell et d'accéder aux magasins de données (tels que des fichiers et dossiers) ainsi qu'au Registre sur l'ordinateur distant. Pour plus d'informations, consultez about_Remote_Requirements. QUEL EST LE FONCTIONNEMENT DE LA COMMUNICATION À DISTANCE ? Lorsque vous envoyez une commande distante, la commande est transmise par le réseau au moteur Windows PowerShell sur l'ordinateur distant et elle s'exécute dans le client Windows PowerShell sur cet ordinateur.Les résultats de la commande sont retournés à l'ordinateur local et s'affichent dans la session Windows PowerShell sur cet ordinateur. Pour transmettre les commandes et recevoir la sortie, Windows PowerShell utilise le protocole Gestion des services Web. Pour plus d'informations sur le protocole Gestion des services Web, consultez la rubrique (en anglais) " WS-Management Protocol " dans Microsoft Developer Network (MSDN) Library à l'adresse https://go.microsoft.com/fwlink/?LinkId=144634. EST-CE QUE LA COMMUNICATION À DISTANCE WINDOWS POWERSHELL EST SÉCURISÉE ? Lorsque vous vous connectez à un ordinateur distant, le système utilise les informations d'identification des mot de passe et nom d'utilisateur sur l'ordinateur local ou celles 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 utiliser SSL (Secure Sockets Layer) et non HTTP pour écouter les demandes de Gestion à distance de Windows (WinRM). Les utilisateurs peuvent ensuite utiliser les paramètres 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écurité et non HTTP. EST-CE QUE TOUTES LES COMMANDES DISTANTES REQUIÈRENT LA COMMUNICATION À DISTANCE WINDOWS POWERSHELL ? Non. Plusieurs applets de commande ont un paramètre ComputerName qui vous permet d'obtenir des objets de l'ordinateur distant. Ces applets de commande n'utilisent pas la communication à distance Windows PowerShell. Vous pouvez ainsi les utiliser sur tout ordinateur qui exécute Windows PowerShell, même si l'ordinateur n'est pas configuré et ne répond pas aux conditions pour la communication à distance Windows PowerShell. Ces applets de commande incluent les applets de commande suivantes : Get-Process Get-Service Get-WinEvent Get-EventLog Get-WmiObject Test-Connection Pour rechercher toutes les applets de commande avec un paramètre ComputerName, tapez : get-help * -parameter ComputerName Pour déterminer si le paramètre ComputerName d'une applet de commande particulière requiert la communication à distance Windows 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 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. Mettez votre commande entre accolades ( {} ) pour en faire un bloc de script. Utilisez le paramètre ScriptBlock de l'applet de commande Invoke-Command pour spécifier la commande. Vous pouvez utiliser le paramètre ComputerName de l'applet de commande Invoke-Command pour spécifier un ordinateur distant. Vous pouvez également créer une connexion permanente à un ordinateur distant (session), puis utiliser le paramètre Session de l'applet de commande 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} - OU - invoke-command -session $s -scriptblock {get-process} Pour interrompre une commande distante, tapez CTRL+C. La requête d'interruption est passée à 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 SEULEMENT ME CONNECTER VIA LE PROTOCOLE TELNET À UN ORDINATEUR DISTANT ? Vous pouvez utiliser l'applet de commande Enter-PSSession pour démarrer une session interactive avec un ordinateur distant. À l'invite de commandes de Windows PowerShell, tapez : Enter-PSSession <NomOrdinateur> L'invite de commandes change pour indiquer que vous êtes connecté à l'ordinateur distant. <NomOrdinateur>\C:> À présent, les commandes que vous tapez s'exécutent sur l'ordinateur distant comme si vous les y aviez tapées directement. Pour mettre fin à la session interactive, tapez : Exit-PSSession Une session interactive est une session permanente qui utilise le protocole Gestion des services Web. Cela ne revient pas à utiliser Telnet, mais l'expérience est semblable. Pour plus d'informations, consultez Enter-PSSession. PUIS-JE CRÉER UNE CONNEXION PERMANENTE ? 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 Windows PowerShell (PSSession) connectée à l'ordinateur distant. Lorsque vous utilisez le paramètre ComputerName de l'applet de commande Invoke-Command ou Enter-PSSession, Windows PowerShell établit une connexion temporaire. Windows PowerShell utilise la connexion pour exécuter uniquement la commande actuelle, puis ferme la connexion. Cette méthode s'avère très efficace pour l'exécution d'une seule commande ou de quelques 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, Windows PowerShell établit une connexion permanente pour la session. Vous pouvez ensuite exécuter plusieurs commandes dans la session PSSession, notamment des commandes qui partagent des données. En général, vous créez une session PSSession pour exécuter une série de commandes lié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, Windows PowerShell exécute les commandes sur tous les ordinateurs spécifiés ou dans toutes les sessions PSSession spécifiées. Windows PowerShell peut gérer des centaines de connexions à distance 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 Windows PowerShell n'étant pas exécutés automatiquement dans les sessions à distance, les commandes que le profil ajoute ne sont pas présentes dans la session. De plus, 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 de l'ordinateur local dans la session de la variable $s. invoke-command -session $s -filepath $profile La commande suivante exécute le profil CurrentUserCurrentHost de l'ordinateur distant dans la session de la variable $s. Étant donné que la variable $profile n'est pas remplie, la commande utilise le chemin d'accès explicite au 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 à distance qui utilise la configuration de session. Pour plus d'informations sur les profils Windows PowerShell, consultez about_Profiles. Pour plus d'informations sur les configurations de session, consultez Register-PSSessionConfiguration. QUEL EST LE FONCTIONNEMENT DE LA LIMITATION SUR LES COMMANDES DISTANTES ? Pour vous aider à gérer les ressources sur votre ordinateur local, Windows PowerShell inclut une fonctionnalité de limitation par commande qui vous permet de limiter le nombre de connexions à distance simultanées établies pour chaque commande. La valeur par défaut est de 32 connexions simultanées, mais vous pouvez utiliser les paramètres ThrottleLimit des applets de commande pour définir une limite d'accélérateur personnalisée pour les commandes particulières. Lorsque vous utilisez la fonctionnalité de limitation, gardez à l'esprit qu'elle s'applique à chaque commande, et non à l'intégralité de la session ou de 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 les applets de commande avec un paramètre ThrottleLimit, tapez : get-help * -parameter ThrottleLimit EXISTE-T-IL DES DIFFÉRENCES SPÉCIFIQUES AU SYSTÈME DANS LA COMMUNICATION À DISTANCE ? Lorsque vous exécutez des commandes sur plusieurs ordinateurs, tenez compte des différences entre les ordinateurs distants, telles que les différences dans les systèmes d'exploitation, la structure du système de fichiers et le Registre. Lorsque vous vous connectez à un ordinateur distant qui exécute Windows Vista ou Windows Server 2003, l'emplacement de démarrage par défaut est le répertoire de base de l'utilisateur actuel, qui est stocké dans la variable d'environnement %homepath% ($env:homepath) et la variable $home de Windows PowerShell. Dans Windows Vista, le répertoire de base est généralement C:\Users\<NomUtilisateur>. Dans Windows Server 2003,le répertoire de base est généralement C:\Documents and Settings\<NomUtilisateur>. Lorsque vous vous connectez à un ordinateur distant qui exécute Windows XP, l'emplacement de démarrage par défaut est le répertoire de base de l'utilisateur par défaut, qui est stocké dans la variable d'environnement %homepath% ($env:homepath) pour l'utilisateur par défaut. Le répertoire de base est généralement C:\Documents and Settings\Default User. EST-CE QUE LA SORTIE DE COMMANDES DISTANTES EST DIFFÉRENTE DE LA SORTIE LOCALE ? Lorsque vous utilisez Windows PowerShell en local, vous envoyez et recevez des objets .NET Framework " en direct " ; il s'agit d'objets associés aux composants système ou programmes réels. Lorsque vous appelez les méthodes ou modifiez les propriétés d'objets en direct, les modifications affectent le composant ou programme réel. Par ailleurs, lorsque les propriétés d'un programme ou composant changent, les propriétés de l'objet qui les représentent changent également. Toutefois, étant donné que la plupart des objets en direct ne peuvent pas être transmis sur le réseau, Windows PowerShell " sérialise " la plupart des objets envoyés dans les commandes distantes, autrement dit, il convertit chaque objet en une série d'éléments de données XML (CLiXML, Constraint Language in XML) pour la transmission. Lorsque Windows PowerShell reçoit un objet sérialisé, il convertit les données XML en un type d'objet désérialisé. L'objet désérialisé est un enregistrement exact des propriétés du programme ou composant dans le passé, mais il n'est plus " en direct ", autrement dit associé directement au composant. En outre, les méthodes sont supprimées, car elles ne s'appliquent plus. En général, vous pouvez utiliser des objets désérialisés comme vous utiliseriez des objets en direct, mais vous devez être conscient de leurs limitations. Par ailleurs, les objets retournés par l'applet de commande Invoke-Command ont des propriétés supplémentaires qui vous aident à identifier l'origine de la commande. Certains types d'objets, tels que les objets DirectoryInfo et GUID, sont reconvertis en objets en direct lorsqu'ils sont reçus. Ces objets ne nécessitent aucune gestion ni 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 TÂCHES EN ARRIÈRE-PLAN À DISTANCE ? Oui. Une tâche en arrière-plan Windows PowerShell est une commande Windows PowerShell qui s'exécute de manière asynchrone sans interagir avec la session. Lorsque vous démarrez une tâche en arrière-plan, l'invite de commandes se réaffiche immédiatement et vous pouvez continuer à travailler dans la session pendant que la tâche s'exécute, même si cette exécution peut prendre un certain temps. Vous pouvez démarrer une tâche en arrière-plan même pendant l'exécution d'autres commandes, car les tâches en arrière-plan s'exécutent toujours de manière asynchrone dans une session temporaire. Vous pouvez exécuter des tâches en arrière-plan sur un ordinateur local ou distant. Par défaut, une tâche 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 toute commande distante comme une tâche en arrière-plan. De plus, vous pouvez utiliser Invoke-Command pour exécuter une commande Start-Job à distance. Pour plus d'informations sur les tâches en arrière-plan dans Windows PowerShell, consultez about_Jobs et about_Remote_Jobs. PUIS-JE EXÉCUTER DES PROGRAMMES WINDOWS SUR UN ORDINATEUR DISTANT ? Vous pouvez utiliser des commandes distantes Windows PowerShell pour exécuter des programmes Windows sur les ordinateurs distants. Par exemple, vous pouvez exécuter Shutdown.exe ou Ipconfig sur un ordinateur distant. Toutefois, vous ne pouvez pas utiliser de commandes Windows PowerShell pour ouvrir l'interface utilisateur de tout 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 de Windows PowerShell ne se réaffiche pas tant que le programme n'est pas terminé ou que vous n'avez pas appuyé sur CTRL+C pour interrompre la commande. Par exemple, si vous exécutez le programme IpConfig sur un ordinateur distant, l'invite de commandes ne se réaffiche pas tant que le programme IpConfig n'est pas terminé. Si vous utilisez des commandes distantes pour démarrer un programme qui a une interface utilisateur, le processus du programme démarre, mais l'interface utilisateur ne s'affiche pas. La commande Windows PowerShell n'est pas terminée et l'invite de commandes ne se réaffiche pas tant que vous n'arrêtez pas le processus du programme ou que vous n'appuyez pas sur CTRL+C, ce qui interrompt la commande et arrête le processus. Par exemple, si vous utilisez une commande Windows PowerShell pour exécuter le Bloc-notes sur un ordinateur distant, le processus du Bloc-notes démarre sur l'ordinateur distant, mais l'interface utilisateur du Bloc-notes ne s'affiche 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 relatives à ces configurations) pour déterminer qui peut exécuter des commandes à distance sur votre ordinateur et quelles commandes peuvent être exécutées. Une configuration de session configure l'environnement pour la session. Vous pouvez définir la configuration en utilisant un assembly qui implémente une nouvelle classe de configuration ou en utilisant un script qui s'exécute dans la session. La configuration peut déterminer les commandes qui sont disponibles dans la session. En outre, la configuration peut inclure des paramètres qui protègent l'ordinateur, tels que les paramètres qui limitent le volume 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 de commande Enable-PSRemoting crée une configuration de session par défaut sur votre ordinateur, Microsoft.PowerShell (et Microsoft.PowerShell32 sur les systèmes d'exploitation 64 bits). Enable-PSRemoting définit le descripteur de sécurité pour la configuration afin de permettre uniquement aux membres du groupe Administrateurs de votre ordinateur de les utiliser. Vous pouvez utiliser les applets de commande de configuration de session pour modifier les configurations de session par défaut, créer des configurations de session et modifier les descripteurs de sécurité de toutes les configurations de session. Lorsque les utilisateurs emploient les applets de commande Invoke-Command, New-PSSession, ou 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 changeant 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 relative aux 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 D'ENTRANCE ET DE SORTANCE ? Le scénario de communication à distance Windows PowerShell le plus courant qui implique plusieurs ordinateurs est la configuration un-à-plusieurs, dans laquelle un ordinateur local (l'ordinateur de l'administrateur) exécute des commandes Windows PowerShell sur de nombreux ordinateurs distants. Il est qualifié de scénario " de sortance ". Toutefois, quelques entreprises utilisent la configuration plusieurs-à-un, où de nombreux ordinateurs clients se connectent à un seul ordinateur distant qui exécute Windows PowerShell, tel qu'un serveur de fichiers ou une borne. Elle est qualifiée de configuration " d'entrance ". La communication à distance Windows PowerShell prend en charge à la fois les configurations d'entrance et de sortance. Pour la configuration de sortance, Windows PowerShell utilise le protocole des services Web pour la gestion (Gestion des services Web) et le service WinRM qui prend en charge l'implémentation Microsoft de la Gestion des services Web. Lorsqu'un ordinateur local se connecte à un ordinateur distant, la Gestion des services Web établit une connexion et utilise un plug-in pour Windows PowerShell afin de démarrer le processus hôte Windows 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 " d'entrance ", Windows PowerShell utilise les services Internet (IIS) pour héberger la Gestion des services Web, charger le plug-in Windows PowerShell et démarrer Windows PowerShell. Dans ce scénario, au lieu de démarrer chaque session Windows PowerShell dans un processus séparé, toutes les sessions Windows PowerShell sont exécutées dans le même processus hôte. La gestion à distance de l'hébergement des services Internet (IIS) et de la configuration d'entrance n'est pas prise en charge dans Windows XP ni dans Windows Server 2003. Dans une configuration d'entrance, l'utilisateur peut spécifier un URI de connexion et un point de terminaison HTTP, notamment les transport, nom d'ordinateur, port et nom d'application. IIS transfère toutes les demandes avec un nom d'application spécifié à l'application. Il s'agit par défaut de la Gestion des services Web, qui peut héberger Windows PowerShell. Vous pouvez également spécifier un mécanisme d'authentification et interdire ou autoriser la redirection à partir des points de terminaison HTTP et HTTPS. PUIS-JE TESTER LA COMMUNICATION A DISTANCE SUR UN SEUL ORDINATEUR(PAS DANS UN DOMAINE) ? Oui. La communication à distance Windows PowerShell est disponible même quand 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 opèrent de la même façon que lorsque vous vous connectez à un ordinateur distant. Pour exécuter des commandes distantes sur un ordinateur dans 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 ils peuvent rendre le système plus vulnérable à une attaque malveillante. Procédez avec prudence lorsque vous apportez ces modifications. -- Windows XP avec SP2 : Utilisez les paramètres de sécurité locale (Secpol.msc) pour remplacer le paramètre de la stratégie " Accès réseau : modèle de partage et de sécurité pour les comptes locaux " dans Paramètres de sécurité\Stratégies locales\Options de sécurité par " Classique ". -- Windows Vista : Créez l'entrée de Registre suivante, puis affectez-lui la valeur 1 : LocalAccountTokenFilterPolicy dans HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System Vous pouvez utiliser la commande Windows PowerShell suivante pour ajouter cette entrée : new-itemproperty ` -path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System ` -name LocalAccountTokenFilterPolicy -propertyType DWord -value 1 -- Windows 2003 : 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 au cas où il aurait changé. PUIS-JE EXÉCUTER DES COMMANDES DISTANTES SUR UN ORDINATEUR DANS UN AUTRE DOMAINE ? Oui. En général, les commandes sont exécutées sans erreur, même s'il est possible que vous deviez utiliser le paramètre Credential des applets de commande Invoke-Command, New-PSSession ou Enter-PSSession pour fournir les informations d'identification d'un membre du groupe Administrateurs sur l'ordinateur distant. Cela est parfois requis même lorsque l'utilisateur actuel est un membre du groupe Administrateurs sur les ordinateurs local et distant. Toutefois, si l'ordinateur distant n'est pas dans un domaine que l'ordinateur local approuve, 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 de commandes de Windows PowerShell. set-item WSMan:\localhost\Client\TrustedHosts -value <Nom-ordinateur-distant> Par exemple, pour ajouter l'ordinateur Server01 à la liste des hôtes approuvés sur l'ordinateur local, tapez la commande suivante à l'invite de commandes de Windows PowerShell : set-item WSMan:\localhost\Client\TrustedHosts -value Server01 VOIR AUSSI about_Remote about_Profiles about_PSSessions about_Remote_Jobs Invoke-Command New-PSSession