Question Problématique de compréhension des jobs

Plus d'informations
il y a 10 ans 3 semaines #21794 par Florent
Bonjour !

Tout d'abord, je m'excuse mais dans mon dernier message (sur les exceptions) je n'ai pas remercié Laurent de son aide. J'ai fait marcher la chose :)

Ma problématique actuelle concerne la compréhension de gestion des jobs. J'ai beau suivre le tutoriel, j'ai besoin d'un éclairage plus précis.

Je dois construire une mini interface en powershell qui affiche des étapes. A chaque étape terminée, l'affichage doit se mettre à jour, barrant l'étape d'avant et mettant en gras l'actuelle. Les étapes sont enregistrées dans un XML. L'interface est de ce fait dynamique.

J'ai donc pensé à séparer l'interface en deux jobs, l'un pour la construction, et l'autre pour la mise à jour. Mais j'ai plusieurs problèmes.

-Le Webbrowser ne marche pas, alors que sans le mettre dans le bloc action, tout marche
-le bloc de code action2, ne s'execute pas

En fait, je cherche à comprendre plus généralement la mécanique d'enchainement des jobs. Genre l'interface est construite et affichée ? ok, je lance la tâche de mise à jour.

Je m'interroge par exemple sur l'interface... est ce que cette tâche doit être terminée ou toujours active pour effectuer des modifications dessus ?

Merci de vos lumières !

[code:1]
$action1={
#Creation de la forme parente
[reflection.assembly]::loadwithpartialname(\"System.Windows.Forms\"«») | Out-Null
[reflection.assembly]::loadwithpartialname(\"System.Drawing\"«») | Out-Null
$form = New-Object System.Windows.Forms.Form
$form.Size = New-Object System.Drawing.Size(768,576)
$form.Text = \"Remote Access Manager\"
$form.FormBorderStyle = [System.Windows.Forms.FormBorderStyle]::FixedDialog
$form.MaximizeBox = $False
$form.MinimizeBox = $False
#

#Creation du panel de label
$Panel = New-Object System.Windows.Forms.Panel
$Panel.Size = New-Object System.Drawing.Size(710,270)
$Panel.Location = New-Object System.Drawing.Size(10,10)
$Panel.BackColor = \"white\"
$Panel.BorderStyle =\"FixedSingle\"
$form.Controls.Add($Panel)

#Creation du webbrowser d'info
$infoBrowser = new-object System.Windows.Forms.WebBrowser
$infoBrowser.Size = new-object System.Drawing.Size(710,200)
$infoBrowser.Location = new-object System.Drawing.Size(10,290)
$infoBrowser.ScrollBarsEnabled = $true
$form.Controls.Add($infoBrowser)
#

<#
#Lecture de la source HTML
$EmplacementFichier = \"h:\csv\Test.html\"
$html = get-content $EmplacementFichier
$infoBrowser.DocumentText = $html
#
#>

#Creation des variables
$c=1
$i=1
#

#Récupération des titres d'étapes à partir d'une source
$sourceXML = [xml](Get-Content h:\csv\SourceTest.XML)
$etapes = $sourceXML.Dialer.Etapes.Etape
#

#Ajout des labels d'étape à l'interface en fonction de la source XML
foreach ($e in $etapes)
{
$x=20
$y=30*$i #On multiplie l'indice de placement vertical par l'increment du compteur pour créer le décalage vertical
$Lbl = New-Object System.Windows.Forms.Label
$Lbl.Size=New-Object System.Drawing.Size(400,20)
$Lbl.Name = \"Label\"+$i
$Lbl.Font = New-Object System.Drawing.Font(\"Times New Roman\",12,[System.Drawing.FontStyle]::Regular)
$Lbl.Text = $e.Num+\" : \"+$e.Label #On s'appuie sur le XML pour le contenu des labels d
$Lbl.Location = New-Object System.Drawing.Point($x,$y)
$Panel.Controls.Add($Lbl)
$i++
}
#

#Affichage de l'interface
$form.ShowDialog()| Out-Null
#

}

$action2={
for ($a=1; $a -lt 100; $a++) {

Write-Progress -Activity \"Working...\" -PercentComplete $a -CurrentOperation \"$a% complete\" -Status \"Please wait.\"
Start-Sleep 1
}
}

start-job -name Job1 -scriptblock $action1
Receive-job -name Job1

start-job -name Job2 -scriptblock $action2
Receive-job -name Job2
[/code:1]

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

Plus d'informations
il y a 10 ans 2 semaines #21798 par xyz
Salut
Mrflamby écrit:

Je dois construire une mini interface en powershell qui affiche des étapes. A chaque étape terminée, l'affichage doit se mettre à jour, barrant l'étape d'avant et mettant en gras l'actuelle.

Ceci me semble être du séquentiel, l'usage de job n'est peut être pas adapté.

Pour ce qui est de coupler des job à GUI (winform) je n'ai pas trouvé de solution concluante sans que cela devienne alambiqué. Mais je n'ai pas essayé en WPF.

Je ne pense pas qu'un job PS soit le pendant du multithreading pour un GUI.
Mrflamby écrit:

j'ai beau suivre le tutoriel, j'ai besoin d'un éclairage plus précis.

Ce n'était pas son objectif. Un job utilise un autre process qui à son tour utilise un autre runspace.
De plus le GUI utilise une file de message qui lui est propre et s'exécute dans un trhead dédié, la difficulté est donc de faire communiquer tous ces éléments en Powershell ;-)

Sinon tente ta chance sur les forum US spécialisés PS ou consulte ce blog et un de ses projets sur github .

Tutoriels PowerShell

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

Plus d'informations
il y a 10 ans 1 semaine #21825 par Florent
De retour en entreprise, je découvre ton message.

Pour le blog que tu m'a donné, j'ai trouvé un exemple interessant, qui me donne une bonne base : learn-powershell.net/2012/10/14/powershe...-different-runspace/

Tu as raison, c'est bien du séquenciel. Je vais donc abandonner les jobs et creuser cette piste :)

Mais... même je réussi, j'ai un problème qui est que ce script doit être executable sous forme d'icone sur le bureau. Cela mérite une autre question que je vais poser d'ici peu :p

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

Plus d'informations
il y a 10 ans 1 semaine #21826 par xyz
Mrflamby écrit:

j'ai trouvé un exemple intéressant, qui me donne une bonne base

Je le note ! J'étudierais ça dans le détail.
Souvent il explique le pourquoi du comment à voir si c'est le cas ici ou s'il s'appuie sur des connaissances implicites de WPF.

Mrflamby écrit:

j'ai un problème qui est que ce script doit être exécutable sous forme d’icône sur le bureau.

Un icône c'est une ligne de commande + un dessin.
Si le principe que tu recherches est \"Je clique ça lance un traitement\", à mon avis pas besoin de binaire .exe. Dans le cas contraire un GUI WPF compilé est préférable.

Tutoriels PowerShell

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

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