Question
appel job dans une function
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 68
il y a 12 ans 1 mois #16913
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:appel job dans une function
smadon écrit:
smadon écrit:
[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.
Oui.Est ce correct ?
smadon écrit:
Oui :Exemple : récupéré $return de la la function StartWait
[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.
- smadon
- Auteur du sujet
- Hors Ligne
- Membre junior
-
Réduire
Plus d'informations
- Messages : 20
- Remerciements reçus 0
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]
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...
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
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.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 68
il y a 12 ans 1 mois #16922
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:appel job dans une function
smadon écrit:
[code:1]
#Récupère la valeur de retour du job
$Result=$StartWaitJob|wait-job | receive-job
[/code:1]
smadon écrit:
[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:
[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
C'est le même, mais pour le récupèrer à la source il suffit de ne pas le propager dans le pipe:Est il possible de non pas récupérer le résultat de la function mais celui du job?
[code:1]
#Récupère la valeur de retour du job
$Result=$StartWaitJob|wait-job | receive-job
[/code:1]
smadon écrit:
Tu peux aussi passer un tableau d'objets spécialisé 'JobArgument' :Donc si je déclare tout dans startIt, je vais me retrouver avec 25 arguments.
[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:
Voir :Désolé mais je ne comprends pas ce que tu veux dire pas le scope.
[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.050 secondes
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- appel job dans une function