Question Statut d'un Runspace

Plus d'informations
il y a 8 ans 7 mois #24404 par xyz
Réponse de xyz sur le sujet Re:Statut d'un Runspace
As-tu essayé d'utiliser la méthode Invoke (appel synchrone) ?

Sinon il y a ce ce module à étudier/tester.
J'ai survolé le code, je n'y ai pas vu de gestion d'erreur du runspace. La classe BackgroundWorker met à disposition l'accès à l'état du runspace, plutôt le pipeline.

Si j'ai le temps je regarde ça demain.

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 8 ans 7 mois #24406 par Laurent
Réponse de Laurent sur le sujet Re:Statut d'un Runspace
Bonjour Laurent,

Pas testé en synchrone,je vais refaire d'autres tests merci de ton aide.

Bonne journée.

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 8 ans 7 mois #24408 par xyz
Réponse de xyz sur le sujet Re:Statut d'un Runspace
j'ai regardé le module cité qui semble êre une piste intéressante.
On ne manipule plus un runspace mais un pseudo composant qui encapsule un runspace. On peut accéder à son état une fois le code du RS terminé :
[code:1]
$drWorker


FrameworkElement : System.Windows.Window
Control :
Results : {@{Value=1000; Sqrt=31,6227766016838}, @{Value=1001; Sqrt=31,6385840391128}, @{Value=1002;
Sqrt=31,6543835826888}, @{Value=1003; Sqrt=31,6701752442262}, @{Value=1004;
Sqrt=31,6859590355097}, @{Value=1005; Sqrt=31,7017349682947}, @{Value=1006;
Sqrt=31,7175030543074}, @{Value=1007; Sqrt=31,7332633052449}, @{Value=1008;
Sqrt=31,7490157327751}, @{Value=1009; Sqrt=31,7647603485372}, @{Value=1010;
Sqrt=31,7804971641414}}
DataReadyAction :
StateChangedAction :
Errors : {Cannot find path 'D:\I_DoNot_Exist.txt' because it does not exist.}
StateInfo : System.Management.Automation.Runspaces.PipelineStateInfo
Parameters : {start: 1000, end: 1010, sleep: 100}
ScriptBlock :
#Try changing millisecinds to 10 no collisions?
# Get-content is added to demonstrate error in script
($start..$end) | Select-Object @{Name=\"Value\";E={$_}},@{Name=\"Sqrt\";\"E\"={[Math]::«»Sqrt($_)}} |
foreach { $_ ;start-sleep -Milliseconds $sleep}
get-content -Path d:\I_DoNot_Exist.txt
#throw \"Marche pas\"
[/code:1]
Les erreurs sont accessible via Errors et le déclenchement d'une exceptions change le status du RS en Failed :
[code:1]
$drWorker.StateInfo

# State Reason
#

#Failed System.Management.Automation.RuntimeException: Marche pas ---> System.Management.Automation.RuntimeException:...
[/code:1]
Dans ton cas le pb n'est pas, il me semble, d'accéder à l'état du RS mais de déclencher la suite.
Ton code ne contient pas de bouton \"Cancel\" c'est voulu ?

Je pensais également utiliser une queue de job ou une stack qui permettrait d'enchainer une ou + actions, mais ce n'est peut être nécessaire ici ni l'objectif...

Si tu utilises le module cité, il se peut qu'il te faille revoir la conception de ton script.

L'exemple d'usage sous WPF est assez simple, reste donc à le tester avec des cas plus élaborés et vérifier le code de libération des ressources.

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 8 ans 7 mois #24410 par Laurent
Réponse de Laurent sur le sujet Re:Statut d'un Runspace
J'ai regardé ce \"module\" mais je n'ai pas trouvé ou il cherchait les infos [code:1][System.Management.Automation.RuntimeException]::[/code:1]


Autre solution supprimer tous les Runspace et garder un Runspace pour la GUI et un runspace pour les actions seul problème dans le runspace il n'arrive pas à savoir quand la case 1 est cochée

[code:1]$global:«»syncHash.check2.isChecked[/code:1]

De cette manière le code s'exécute à la suite et plus besoin de savoir si le runspace 1 est terminé pour lancer le 2

Qu'en penses tu ?

Si je trouve une solution viable aucun soucis pour changer quelques lignes du code.

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 8 ans 7 mois #24411 par xyz
Réponse de xyz sur le sujet Re:Statut d'un Runspace
laurenzo34000 écrit:

J'ai regardé ce \"module\" mais je n'ai pas trouvé ou il cherchait les infos

Je n'ai pas compris.

laurenzo34000 écrit:

seul problème dans le runspace il n'arrive pas à savoir quand la case 1 est cochée

Cela dépend du comportement que tu souhaites.
Tu peux insérer l'état de 'case1' dans le runspace du traitement.
laurenzo34000 écrit:

De cette manière le code s'exécute à la suite et plus besoin de savoir si le runspace 1 est terminé pour lancer le 2

Qu'en penses tu ?

Effectivement je pensais à qq chose comme ça :
[code:1]
$Traitement =CodeRS1
if (cas2) {$Traitement +=CodeRS2 } [/code:1]
Car c'est, à priori, juste un enchainement de traitements.
Mais sans connaitre l'infra, les besoins et le contexte global, il est tjr difficile de proposer qq chose de pertinent.

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 8 ans 7 mois #24414 par Laurent
Réponse de Laurent sur le sujet Re:Statut d'un Runspace
Un peu plus d'explication :


j'ai un script avec une interface graphique et des runs Space et plusieurs checkbox quand une checkbox est coché cela lance un autre script powershell pour installer un logiciel avec les bons commutateur /silent /que ... (environ 14 logiciels)


Si tu le souhaites Laurent je peux t'envoyer le code en PV.


Le problème actuel c'est que comme il y a plusieurs Runspace et aucun ordre d'exécution tout se lance en même temps (message d'erreur Windows car impossible d'installer plusieurs logiciels en même temps.


Deux solutions :


-1 Je garde tous les runs Space mais je dois avoir un ordre d'exécution si le run Space 1 est terminée car cochée je lance le script qui installe le logiciel si la case 1 n'est pas cochée je passe directement à la vérification de la case 2 et ainsi de suite.Le problème actuellement c'est que tous les runspaces s'exécutent en même temps car dès que la case est cochée il lance le script d'installation du logiciel sans autre vérification (Completed ou Not Started).


-2 Je garde un seul Runspace qui contient tout le code qui s'effectue de manière synchrone et dès que je clique sur \"installer\" cela lance le Runspace mais actuellement le problème c'est que dans ce Runspace il n'arrive pas à détecter si la case est cochée.


Dans les deux cas il est obligatoire d'utiliser des Runspace pour ne pas que la GUI Freeze durant l'installation des logiciels.


Encore merci pour ta patience et ton aide Laurent.

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 0.050 secondes
Propulsé par Kunena