Question appel job dans une function

Plus d'informations
il y a 12 ans 1 mois #16913 par Laurent Dardenne
smadon écrit:

Est ce correct ?

Oui.
smadon écrit:

Exemple : récupéré $return de la la function StartWait

Oui :
[code:1]
# Variable
$Arg1 = \"notepad.exe\"
$Arg2 = \"C:\temp\monfichier.txt\"
'test' > $Arg2


function StartWait {
param ( $Arg1, $Arg2 )

Write-host \"Start-Process -FilePath $Arg1 -ArgumentList $Arg2 -Wait\"

if (Test-Path $Arg2) {
# Start Process
Start-Process -FilePath $Arg1 -ArgumentList $Arg2 -Wait
}

Start-Sleep -seconds 2
Write-Host \"startWaitFinish\"
Write-Output 125
Write-error \"Une erreur.\"
}# StartWait

function startIt {
Write-Host \"Start\"

$StartWaitJob = start-job -ScriptBlock ${function:«»StartWait} -Name \"startWaitJob\" -ArgumentList $Arg1, $Arg2

#Propage la valeur de retour
$StartWaitJob|wait-job | receive-job
#On supprime le job devenu inutile
$StartWaitJob|remove-job
}

function FirstFunction {
StartIt

}

$Result=FirstFunction
Write-Warning \"Résultat du job : $Result\"
[/code:1]
Par contre, et je vais me répéter, les variables $Arg1 et $Arg2 devrait être des paramètres de la fonction startit.
Et un dernier conseil, évite l'usage de scopes, surtout avec les jobs.

Tutoriels PowerShell

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

Plus d'informations
il y a 12 ans 1 mois #16919 par smadon
Réponse de smadon sur le sujet Re:appel job dans une function
Hello,

merci Laurent pour ta réponse.

Est il possible de non pas récupérer le résultat de la function mais celui du job?

Je voudrais réutiliser le résultat du job dans la function StartIt.

[code:1]
# Start Job $StartWaitJob
#Si resultat $StartWaitJob = 1
# alors je lance start-Process Tata
# sinon je lance start-Process Titi
[/code:1]

les variables $Arg1 et $Arg2 devrait être des paramètres de la fonction startit.


Ok pour passer tout les paramètres dans StartIt, mais je voudrais lancer 5 jobs dans StartIt et chaque job qui ont chacun 5 paramètre. Donc si je déclare tout dans startIt, je vais me retrouver avec 25 arguments.
Ça va rentre le code difficilement lisible...

un dernier conseil, évite l'usage de scopes, surtout avec les jobs.


Désolé mais je ne comprends pas ce que tu veux dire pas le scope.
Peux tu m'envoyer un liens sur le sujet pour comprendre ta remarque ?

D'avance merci

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

Plus d'informations
il y a 12 ans 1 mois #16922 par Laurent Dardenne
smadon écrit:

Est il possible de non pas récupérer le résultat de la function mais celui du job?

C'est le même, mais pour le récupèrer à la source il suffit de ne pas le propager dans le pipe:
[code:1]
#Récupère la valeur de retour du job
$Result=$StartWaitJob|wait-job | receive-job
[/code:1]
smadon écrit:

Donc si je déclare tout dans startIt, je vais me retrouver avec 25 arguments.

Tu peux aussi passer un tableau d'objets spécialisé 'JobArgument' :
[code:1]
$Name='JobArguments'
New-PSCustomObjectFunction $Name Arg1,Arg2|Set-Item Function:\"New-$Name\" -Force

New-JobArguments 'un' 'deux'
# Arg1 Arg2
# ---- ----
# un deux

#crée un tableau de paramètres de job
$ArgsJob=@(
(New-JobArguments 'un' 'deux'),
(New-JobArguments '2' 'deux'),
(New-JobArguments '3' 'deux'),
(New-JobArguments '4' 'deux'),
(New-JobArguments '5' 'deux')
)

function StartIt {
$ArgsJob # ajout de controle sur le type des objets
...
}

#Ou une hashtable
$ArgsJob=@{}
$ArgsJob.Job1=(New-JobArguments 'un' 'deux')
$ArgsJob.Job2=@{Arg1='1';Arg2='2';Arg3='3'} #attention n'est pas ordonnée
[/code:1]
smadon écrit:

Désolé mais je ne comprends pas ce que tu veux dire pas le scope.

Voir :
[code:1]Help about_scope[/code:1]
Ici il s'agit de déclarer des variables et de les référencer dans tes fonctions sans utiliser de clause param.
Dans ce cas c'est le moteur PS qui recherche où trouver la variable référencée. Avec la clause param c'est toi qui lui dit où les trouver.
Le principe : www.liafa.jussieu.fr/~hf/verif/ens/cours/C++/node17.html

Tutoriels PowerShell

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

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