Question
Problématique de compréhension des jobs
- Florent
- Auteur du sujet
- Hors Ligne
- Membre junior
-
Réduire
Plus d'informations
- Messages : 26
- Remerciements reçus 0
il y a 10 ans 3 semaines #21794
par Florent
Problématique de compréhension des jobs a été créé 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]
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.
- xyz
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 69
il y a 10 ans 2 semaines #21798
par xyz
Tutoriels PowerShell
Réponse de xyz sur le sujet Re:Problématique de compréhension des jobs
Salut
Mrflamby écrit:
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:
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 .
Mrflamby écrit:
Ceci me semble être du séquentiel, l'usage de job n'est peut être pas adapté.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.
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:
Ce n'était pas son objectif. Un job utilise un autre process qui à son tour utilise un autre runspace.j'ai beau suivre le tutoriel, j'ai besoin d'un éclairage plus précis.
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.
- Florent
- Auteur du sujet
- Hors Ligne
- Membre junior
-
Réduire
Plus d'informations
- Messages : 26
- Remerciements reçus 0
il y a 10 ans 1 semaine #21825
par Florent
Réponse de Florent sur le sujet Re:Problématique de compréhension des jobs
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
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
Connexion ou Créer un compte pour participer à la conversation.
- xyz
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 69
il y a 10 ans 1 semaine #21826
par xyz
Tutoriels PowerShell
Réponse de xyz sur le sujet Re:Problématique de compréhension des jobs
Mrflamby écrit:
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:
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.
Je le note ! J'étudierais ça dans le détail.j'ai trouvé un exemple intéressant, qui me donne une bonne base
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:
Un icône c'est une ligne de commande + un dessin.j'ai un problème qui est que ce script doit être exécutable sous forme d’icône sur le bureau.
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.042 secondes
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- Problématique de compréhension des jobs