École Geek Apprendre à utiliser la communication à distance dans PowerShell
L’une des meilleures fonctionnalités offertes par PowerShell est la possibilité de gérer à distance vos serveurs. Il vous permet même de gérer plusieurs d'entre eux à la fois.
Assurez-vous de lire les articles précédents de la série:
- Apprenez à automatiser Windows avec PowerShell
- Apprendre à utiliser les cmdlets dans PowerShell
- Apprendre à utiliser des objets dans PowerShell
- Apprentissage du formatage, du filtrage et de la comparaison dans PowerShell
Et restez à l'écoute pour le reste de la série toute la semaine.
Qu'est-ce que le remoting??
La gestion en bloc de vos serveurs peut s'avérer fastidieuse, et si vous avez déjà dû modifier la configuration d'IIS sur 50 serveurs Web auparavant, vous comprendrez ce que je veux dire. C'est le genre de situation où PowerShell Remoting et les capacités de script du langage peuvent venir à la rescousse. En utilisant HTTP ou le protocole HTTPS plus sécurisé, PowerShell Remoting vous permet d’envoyer des commandes à un ordinateur distant de votre réseau. La machine exécute ensuite les commandes et vous renvoie la sortie, qui est à son tour affichée sur votre écran..
Passons à la technique
Au cœur de PowerShell Remoting se trouve un seul service Windows, le service de gestion à distance Windows ou WinRM, comme on l'appelle maintenant. À l'aide de WinRM, vous pouvez configurer une ou plusieurs configurations de session (également appelées points finaux), qui sont essentiellement des fichiers contenant des informations sur l'expérience que vous souhaitez fournir à la personne se connectant à votre instance PowerShell distante. Plus spécifiquement, vous pouvez utiliser les fichiers de configuration de session pour définir qui peut et qui ne peut pas se connecter à l'instance, les applets de commande et les scripts qu'ils peuvent exécuter, ainsi que le contexte de sécurité dans lequel la session doit être exécutée. En utilisant le service WinRM, vous configurez également des «écouteurs», qui écoutent les demandes PowerShell entrantes. Ces «écouteurs» peuvent être HTTP ou HTTPS et peuvent être liés à une seule adresse IP sur votre machine. Lorsque vous ouvrez une connexion PowerShell à une autre machine (techniquement, cela se fait à l'aide du protocole WS-MAN, basé sur HTTP), la connexion est liée à l'un de ces "écouteurs". Les "auditeurs" sont ensuite chargés d'envoyer le trafic à l'application associée au fichier de configuration de session approprié; l’application (normalement PowerShell mais vous pouvez avoir d’autres applications d’hébergement si vous le souhaitez) exécute ensuite la commande et renvoie les résultats dans «l’auditeur» du réseau et sur votre ordinateur..
Me montrer comment
La première chose à faire est d'activer la communication à distance sur la machine à laquelle vous souhaitez vous connecter. Cela peut être fait en lançant ce qui suit:
Activer-PSRemoting
Vous devrez ensuite répondre oui à toutes les invites. Lorsque vous exécutez Enable-PSRemoting, quelques modifications sont apportées à votre PC:
- Le service WinRM démarre.
- Le service WinRM passe du mode de démarrage manuel à automatique.
- Il crée un écouteur HTTP lié à toutes vos cartes réseau..
- Il crée également une exception de pare-feu entrant pour le protocole WS-MAN..
- Certaines configurations de session par défaut sont créées
Si vous exécutez Windows 7 et que l'emplacement de votre carte réseau est défini sur Public, l'activation de PowerShell Remoting échouera. Pour résoudre ce problème, il suffit de basculer vers l'emplacement du réseau domestique ou professionnel. Vous pouvez également ignorer la vérification du réseau en utilisant les éléments suivants:
Enable-PSRemoting -SkipNetworkProfileCheck
Cependant, nous vous recommandons de changer plutôt l'emplacement de votre réseau.
Il existe deux façons de se connecter à une autre machine à l'aide de PowerShell. Il y a la méthode one to one, qui est très similaire à l'utilisation de SSH, et il y a la méthode one to many.
Utiliser une session PowerShell
Le premier moyen de se connecter à un ordinateur distant à l'aide de PowerShell consiste à utiliser une session appelée PowerShell Session. Mettre simplement une session vous permet d’exécuter des commandes sur la machine distante de manière interactive de la même manière que vous le feriez sur votre propre machine. Pour ouvrir une session, tapez simplement ce qui suit:
Enter-PSSession -ComputerName “Darlah”
L’invite obtiendra un préfixe indiquant la machine sur laquelle vous exécutez les applets de commande..
À partir de là, vous pouvez vraiment traiter l’invite comme si vous étiez assis devant la machine distante. Par exemple, si vous voulez voir tous les fichiers sur le lecteur C: \, vous pouvez faire un simple:
Get-ChildItem -Path C: \
Si vous venez d’un contexte Linux, vous pouvez envisager l’utilisation de cette méthode de rappel à distance comme alternative de PowerShell à SSH..
Utiliser Invoke-Command
La deuxième façon d'utiliser PowerShell sur un ordinateur distant consiste à utiliser Invoke-Command. L'avantage d'utiliser Invoke-Command provient du fait que vous pouvez exécuter la même commande sur plusieurs machines simultanément. Comme vous pouvez l'imaginer, cela est particulièrement utile lorsque vous souhaitez effectuer une opération telle que la collecte de journaux d'événements à partir de vos serveurs. Invoke-Command respecte la syntaxe suivante:
Invoke-Command -ComputerName Darlah, localhost -ScriptBlock Application Get-EventLog -Newest 2
Comme la commande est exécutée en parallèle sur toutes les machines, vous aurez besoin d'un moyen de voir de quel PC provient un résultat donné. Vous pouvez le faire en consultant la propriété PSComputerName.
Lorsque vous utilisez Invoke-Command, vous ne possédez plus les objets auxquels vous pouvez vous attendre dans le Pipeline. Vous voyez, pour que PowerShell puisse récupérer les informations de la machine distante sur votre machine, il doit disposer d'un moyen de représenter les objets que la commande que vous avez exécutée génère en sortie. De nos jours, il semble que le moyen choisi pour représenter une structure de données hiérarchique consiste à utiliser XML, ce qui signifie que lorsque vous exécutez une commande à l'aide de Invoke-Command, les résultats sont d'abord sérialisés en XML avant d'être renvoyés à votre ordinateur. Une fois qu'ils sont revenus sur votre machine, ils sont désérialisés dans un objet. la chose à faire ici est que, lorsqu'elles sont désérialisées, toutes les méthodes, à l'exception de la méthode ToString (), dont l'objet est dépouillé.
Remarque: Il existe quelques exceptions à cette règle. Par exemple, la plupart des types primitifs tels que les entiers peuvent être désérialisés avec ses méthodes. Il existe également un processus appelé Réhydratation dans lequel certaines méthodes peuvent être rajoutées aux objets désérialisés. Alors faites attention et rappelez-vous Get-Member est votre ami.
Devoirs
- Lire le livre électronique Secrets of PowerShell Remoting de Don Jones.