Projet

Général

Profil

New-Runspace

Function New-Runspace( [scriptblock] $scriptToRun, 
                       [Management.Automation.Runspaces.RunspaceConfiguration] $configuration=$null,
                       [switch] $RunInstance, 
                       [switch] $InteractWithHost
                     )
Usage :
Crée un objet personalisé encapsulant un runspace dans lequel sera exécuté de manière asynchrone le scriptblock $scriptToRun.
Paramètres :
  • $scriptToRun Contient le code à exécuter.
  • $configuration permet de charger des fonctions additionnells dans la configuration du runspace.
  • $RunInstance spécifie l'exécution asynchrone immédiate du runspace, sinon utilisez $Runspace.InvokeAsync($RS1.Command)
  • $InteractWithHost : Configure le runspace afin d'interagir avec un host, on autorise l'affichage vers la console PowerShell.

Exemples :

#------------- Exemple 1 -------------------------------------
  $RS1=New-RunSpace -interact { 
    Write-host("Début de RS1`r`n"); 
    1..5|% {Write-host "[Runspace]Element $_"}
    #sleep -m 500
    Write-host("Fin de RS1`r`n") 
  }#RS1
  $RS1
   $RS1.InvokeAsync($RS1.Command);  1..10|% {Write-host "[Session PowerShell]Element $_"}#;sleep -m 500 }
  $RS1
   #Libére le runspace
  if (!$Rs1.IsRunning)
   {$RS1.RunSpace.Close();$RS1=$null}
  else 
   {
    "Le runspace est en cours d'exécution" 
     #On peut forcer l'arrêt du pipeline 
    #$RS1.Stop()
    #$RS1.RunSpace.Close();$RS1=$null
   }

#------------- Exemple 2 -------------------------------------
$RS1=New-RunSpace -interact {
 $c=($input|measure-object).Count
 Write-host "Count= $c" 
}# RS1
$Tab=1..5
 #Envoie,dans le pipeline du runspace, le tableau $TAB élément par élément
$RS1.InvokeAsync($RS1.Command,$Tab)
 #Envoie le tableau comme un seul élément
$RS1.InvokeAsync($RS1.Command,@(,$Tab))

#------------- Exemple 2-1 ------------------------------------- 
$RS1=New-RunSpace { $input|sort-object}
$RS1.InvokeAsync($RS1.Command,"C","A","B")
$RS1.Result #-> ABC