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
- 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
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”
L'invite obtiendra un préfixe indiquant l'ordinateur sur lequel vous exécutez les applets de commande.
Get-ChildItem –Path C:
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}
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.