École Geek: apprendre à utiliser la communication à distance dans PowerShell

Table des matières:

École Geek: apprendre à utiliser la communication à distance dans PowerShell
École Geek: apprendre à utiliser la communication à distance dans PowerShell

Vidéo: École Geek: apprendre à utiliser la communication à distance dans PowerShell

Vidéo: École Geek: apprendre à utiliser la communication à distance dans PowerShell
Vidéo: Introduction à Powershell - YouTube 2024, Avril
Anonim
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.
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 la communication à distance?

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 de la langue 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 sur votre réseau. La machine exécute ensuite les commandes et vous renvoie la sortie, qui est à son tour affichée sur votre écran.

Let's Get Technical

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 précisément, vous pouvez utiliser les fichiers de configuration de session pour définir qui peut ou ne peut pas se connecter à l'instance, les cmdlets 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 via «l'écouteur» sur le réseau, puis 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:

Enable-PSRemoting

Vous devrez ensuite répondre oui à toutes les invites. Lorsque vous exécutez Enable-PSRemoting, quelques modifications sont apportées à votre PC:
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 vous 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.
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 existe la méthode one to one, très similaire à l’utilisation de SSH, puis la méthode one to many.

Utiliser une session PowerShell

La première façon de se connecter à une machine distante à 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”

Image
Image

L'invite obtiendra un préfixe indiquant l'ordinateur sur lequel 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:
À 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.
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 seconde façon d'utiliser PowerShell sur un ordinateur distant consiste à utiliser Invoke-Command. L’utilisation de Invoke-Command présente l’avantage de pouvoir 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 {Get-EventLog Application -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.
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 obtenir 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. Le problème, c’est que lorsqu’elles sont désérialisées, toutes les méthodes, sauf la méthode ToString (), dont l’objet avait été dépouillé.
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 obtenir 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. Le problème, c’est que lorsqu’elles sont désérialisées, toutes les méthodes, sauf la méthode ToString (), dont l’objet avait été dépouillé.
Image
Image

Remarque: Il existe certaines 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, soyez prudent et rappelez-vous que Get-Member est votre ami.

Devoirs

Lire le livre électronique Secrets of PowerShell Remoting de Don Jones.

Conseillé: