Remoting powershell – Partie 3

Salut,

Dans les deux précedents billets j’ai pu aborder la configuration de WinRM et l’utilisation de la cmdlet Invoke-Command. Dans ce dernier billet sur le remoting, je vais aborder l’utilisation des sessions powershell.

On peut retrouver deux types de sessions:

  • Les sessions distantes interactives
  • Les sessions distantes persistantes

Si on doit exécuter des tâches sur une machine précise, il est préférable d’ouvrir une session interactive.

 

Les sessions distantes interactives

 

Pour créer une session distante interactive, on utilise la cmdlet

[powershell]

 

Enter-PSSession -ComputerName <server>

 

[/powershell]

 

On peut du coup, travailler comme si l’on était physiquement sur la machine. Il y a cependant des limitations, la principale est dûe au fait qu’on ne peut avoir qu’une seule session interactive à la fois, le paramètre -ComputerName n’accepte qu’une valeur.

Si l’on quitte la session, les objets, les variables, etc propres à cette sessions sont perdus (comme avec la cmdlet Invoke-Command)

Pour sortir d’une session interactive

[powershell]

 

Exit-PSSession

 

[/powershell]

 

 

Les sessions distantes persistantes

 

Pour travailler de manière prolongée sur une ou plusieurs machines distantes, il est possible de créer des sessions persistantes, avec la cmdlet New-PSSession.

Ces sessions pourront être utilisées pour lancer des commandes avec Invoke-Command ou pour ouvrir des sessions interactives avec Enter-PSSession. Contrairement aux sessions interactives, tous les objets créés seront conservés, ainsi que les variables, etc…

Les sessions sont identifiées avec un ID ou un objet de type session. Vous pouvez créer des sessions de différentes façons:

  • New PSSession -ComputerName Server1
  • $Sessions = New-PSsession Server1,Server2,Server3
  • Get-Credential | New-PSSession -ComputerName Server1 -Credential $_

 

La liste des sesions s’obtient en utilisant

[powershell]

 

Get-PSSession

 

[/powershell]

 

 

A partir d’une collection de sessions, il est toujours possible de créer un objet de session ne contenant que celles nécessaires. Soit par l’ID de la session, soit par le nom du server.

 

Pour réutiliser les sessions distantes, vous pouvez :

  • Créer une session interactive
[powershell]

 

Enter-PSSession -ID IDSession

Enter-PSSession – Session $ObjetSession

 

[/powershell]

 

  • Exécuter un script ou une commande
[powershell]

 

Invoke-Command -Session $ObjetSession

 

[/powershell]

 

Les sessions sont isolées, et les connées propres à chaque sessions sont conservées jusqu’à la fermeture effective des sessions.

 

Pour fermer les sessions, utilisez la cmdlet Remove-PSSession

 

[powershell]

 

Remove-PSSession -ID IDSession

Remove-PSSession -Session $ObjetSession

Remove-PSSession -ComputerName Server1

 

[/powershell]

 

Ou plus simple, pour tout fermer.

 

[powershell]

 

Get-PSSession | Remove-PSSession

 

[/powershell]

 

Limitations

 

Par défaut, de nombreuses limitations sont mises en place:

  • Un utilisateur ne peut ouvrir que 5 sessions par machine
  • Une machine avec WinRM configuré  n’accepte que 5 utilisateurs distants, donc 25 sessions au maximum
  • Les session Powershell v2 sont fragiles, il y a eu beaucoup d’innovation avec la v3 ( que je n’ai pas sous la main 🙁  )
  • 32 connexions simultanées initiées par une commande au maximum, les autres seront en attente. ( Throttling – Get-help * -parameter Throttlelimit )

 

Pour voir votre configuration actuelle:

[powershell]

 

Ls WSMan:localhostshell

 

[/powershell]

 

 

Pour modifier des valeurs, vous pouvez utiliser, par exemple la commande ci-dessous

 

[powershell]

 

Set-Item -Path WSMan:localhostShellMaxMemoryPerShellMB -Value 1000

 

[/powershell]

 

En espérant que cette série d’articles vous aura permis de prendre goût au remoting Powershell autant que moi.

@+