Gestion des postes de travail à distance
Introduction
Le périmètre d’activité de Windows PowerShell ne s’arrête pas au poste de travail local. En effet, Windows PowerShell offre la possibilité d’administrer à distance une ou plusieurs machines en même temps. Ainsi, l’ensemble des cmdlets qui ont été décrites dans les précédents chapitres peuvent être employées pour gérer l’ensemble d’un parc informatique.
Ce chapitre décrit comment procéder pour administrer à distance des postes de travail Windows, mais aussi les technologies qui sont employées, les prérequis, et une description de l’ensemble des cmdlets qui permettent d’administrer à distance.
La communication à distance du Framework .NET
La puissance offerte par Windows PowerShell vient du Framework .NET, qui est par ailleurs un prérequis obligatoire pour que l’interpréteur de commandes puisse s’installer. De ce fait, il hérite des fonctionnalités d’exécution à distance du Framework .NET.
Vous avez certainement remarqué la présence du paramètre -ComputerName dans plusieurs commandelettes : il permet d’exécuter une commande sur un ou plusieurs postes de travail distants. L’un des avantages donnés par la communication à distance du Framework .NET est qu’il n’est pas nécessaire que Windows PowerShell soit installé sur les postes de travail distants, et qu’il s’agit d’une méthode simple pour la gestion à distance des machines. Le seul prérequis est d’être connecté sur la machine locale avec un compte possédant les droits d’administration sur la machine distante.
Cependant, il y a aussi un inconvénient : la communication s’appuie sur le protocole RPC (Remote Procedure Call), ce dernier étant fréquemment bloqué par les routeurs réseau, mais aussi par les pare-feux.
1. Les cmdlets de communication à distance du Framework .NET
Pour identifier les cmdlets possédant le paramètre -ComputerName, il suffit de rentrer la ligne de commande suivante :
PS C:\Windows\system32> Get-Command -ParameterName ComputerName
Mais, attention cependant, car en réalité ce ne sont pas toutes les cmdlets listées qui se basent sur la communication à distance du Framework .NET. En effet, des cmdlets se basent sur PowerShell Remoting qui sera vu plus loin.
Le seul moyen de savoir si le paramètre -ComputerName utilise le procotole RPC est de consulter l’aide en ligne de la cmdlet que l’on souhaite utiliser, avec la cmdlet Get-Help. Voici un exemple avec Get-WmiObject :
PS C:\Windows\system32> Get-Help Get-WmiObject -Parameter
ComputerName
-ComputerName <String[]>
Specifies the target computer for the management operation.
Enter a fully qualified domain name, a NetBIOS name, or an IP
address. When the remote computer is in a different...
La gestion à distance Windows PowerShell
Introduite avec la version 2.0 de Windows PowerShell, la technologie PowerShell Remoting permet l’administration à distance de divers produits Microsoft à travers le réseau.
En s’appuyant sur des techniques et protocoles normalisés, PowerShell Remoting répond aux besoins de plus en plus omniprésents en entreprise : administrer des systèmes d’exploitation (incluant les rôles et fonctionnalités), mais aussi serveurs (Exchange, etc.) uniquement avec Windows PowerShell. C’est en tout cas l’orientation prise par Microsoft sur l’ensemble de ses produits.
Vous allez voir comment fonctionne PowerShell Remoting avec les postes de travail, comment l’utiliser, et aussi les différents scénarios qui peuvent se présenter.
1. Qu’est-ce que PowerShell Remoting ?
PowerShell Remoting est une fonctionnalité qui permet l’exécution de lignes de commandes et de scripts sur une ou plusieurs machines distantes. Il fournit un environnement générique qui permet l’administration à distance et l’exécution de n’importe quelle ligne de commande. Vous pouvez avoir directement une console Windows PowerShell comme si vous étiez physiquement devant l’ordinateur distant.
Ce mécanisme de communication s’appuie sur le protocole WS-Management (abréviation : WS-Man), qui fonctionne à l’aide du service "Gestion à distance de Windows (Gestion WSM)", appelé également WinRM (Windows Remote Management). Cette technologie permet l’envoi de requêtes de gestion à des machines sur le réseau via des ports spécifiques.
Les postes de travail qui doivent recevoir ces requêtes doivent être préalablement configurés afin d’écouter sur le réseau et de traiter les requêtes qui leur sont destinées.
2. Le fonctionnement de PowerShell Remoting
Afin de mieux comprendre quels sont les composants utilisés lors d’une communication à distance Windows PowerShell, voici un schéma explicatif :
Schéma détaillant le fonctionnement de PowerShell Remoting
Voici une description des différentes étapes du fonctionnement de PowerShell Remoting :
1. Votre...
Administrer à distance
C’est le moment de passer aux choses sérieuses avec PowerShell Remoting : l’administration à distance. Cette section explique comment envoyer des commandes administratives sur des postes de travail distants, mais aussi comment envoyer des scripts.
Les cmdlets détaillées sont les suivantes :
-
New-PSSession : crée une nouvelle session permanente avec un ordinateur distant.
-
Get-PSSession : récupère la liste des sessions permanentes établies.
-
Remove-PSSession : supprime une session permanente.
-
Enter-PSSession : démarre une session interactive avec l’ordinateur distant.
-
Exit-PSSession : quitte la session interactive.
-
Invoke-Command : exécute une commande PowerShell sur un ordinateur distant. Permet également d’envoyer un script.
1. Les différents types de sessions distantes
Il existe deux types de sessions qui permettent d’exécuter des commandes Windows PowerShell via PowerShell Remoting, chacune possédant des avantages et des inconvénients :
-
La session temporaire : elle s’établit à l’aide des cmdlets Invoke-Command et Enter-PSSession. Une session temporaire dure le temps d’exécution d’une commande dans le cas d’Invoke-Command, alors que pour Enter-PSSession, celle-ci dure jusqu’à ce que l’administrateur quitte la session interactive.
-
La sessionpermanente (créée avec New-PSSession) : elle dure le temps d’une session PowerShell, à moins que l’administrateur ne la supprime volontairement. Établir une ou plusieurs sessions permanentes peut s’avérer utile quand des données doivent être partagées. Pour utiliser ces sessions permanentes, il faut recourir au paramètre -Session des cmdlets Invoke-Command ou Enter-PSSession, et spécifier la session désirée.
2. Les sessions permanentes
Les sessions permanentes ont un énorme avantage : vous pouvez partager des données entre votre ordinateur et le poste de travail distant (voir l’exemple 3 de la section Exécuter une commande à distance).
a. Créer une session permanente à distance
Pour créer une session permanente, il faut utiliser la cmdlet New-PSSession. Voici tout d’abord...