Remoting powershell – Partie 2

Bonjour,

Dans un précédent billet, nous avons étudié la mise en place et la configuration des sessions powershell distantes à travers WinRM. Cette deuxième partie va aborder l’exécution des commandes dites “unitaires”.

Une fois WinRM configuré, les machines distantes sont prêtes à recevoir des commandes.

 

Invoke-Command

 

La première technique est l’utilisation de la cmdlet Invoke-Command -ComputerName <Ser ver> -Scriptblock {commande} qui va créer une session temporaire, qui sera fermée une fois la commande exécutée. Cette commande est utile pour jouer des connandes de façon ponctuelle et si vous ne souhaitez pas conserver de variables en mémoire

[powershell]

 

PS C:Windowssystem32> Invoke-command -ComputerName localhost {Get-Process powershell}

 

[/powershell]

 

 

Lors de l’exécution de la cmdlet, une nouvelle session Powershell isolée de toutes les autres est crée sur la machine distante et n’existera que le temps du traitement. C’est pourquoi, toute variable définie dans le scriptblock ne sera pas réutilisable par un autre appel à Invoke-Commande

L’exécution de ces deux commandes ne retournera rien.

[powershell]

 

Invoke-Command -ComputerName localhost { $process = Get-Process}

Invoke-Command -ComputerName localhost { $process | Format-Table processname,id }

 

[/powershell]

 

Il est tout à fait possible d’initier des sessions temporaires sur plusieurs machines quasi simultanément et de leurs spécifier des credentials

[powershell]

 

$serveurs = “machine1″,”machine2”
$cred = Get-Credential
Invoke-Command –Computername $serveurs {commande} –Credential $cred
[/powershell]

Ou

[powershell] Invoke-Command –Computername Machine1, Machine2 {commande}
[/powershell]

 

Il est également possible d’exécuter des scripts entreposés sur la machine distante. Veillez bien cependant à que que l’execution policy de Powershell soit correctement configurée pour l’éccepter.

 

[powershell] Invoke-Command –Computername localhost { c:pathtoscript.ps1 }
[/powershell]

 

Il est aussi possible d’exécuter sur la machine distante, un script Powershell stocké en local. Le script est exécuté localement, (l’execution policy du poste doit autoriser l’exécution des scripts) puis les instructions contenues dans le script sont invoquées sur la machine distante.

Cette technique évite d’avoir à maintenir des scripts sur l’ensemble de vos machines.

 

[powershell] Invoke-Command –Computername localhost -FilePath  c:pathtoscript.ps1
[/powershell]

 

Remarques

 

Différentes opérations sont effectuées sur les objets avant qu’ils soient retournés à travers le réseau:

  1. Snapshot des propriétés de l’objet sur la machine distante
  2. Transmission de l’objet sérialisé sur le réseau
  3. Désérialisation de l’objet reçu sur la machine locale

 

Ceci implique que les méthodes liées aux objets initiaux sont perdues.

 

 

En local,

 

J’espère que vous avez apprécié la lecture de ce billet et qu’il vous fera patienter jusqu’à la prochaine partie où j’aborderais les sessions distantes interactives.

Bonne journée !