Question Fonction Avancées - Begin Process End

Plus d'informations
il y a 5 ans 2 semaines #20173 par Richard Lazaro
Bonjour,

Je suis en train décrire une fonction qui va utiliser les blocs Begin/Process/End

Begin : Bloc d'initialisation de la fonction, exécuté en début et qu'une seule fois

Process : Bloc \"d'exécution\", va être exécuté aprés le bloc Begin, pour traiter les donner et aussi autant de fois qu'il y a d'objet dans le pipeline (si configuré comme tel)

End : Bloc de termination de la fonction, exécuté en fin et qu'une seule fois

Aprés, cette petite explication pour les \"novices\".
Voici une question pour les plus initiés :

Dans le Begin, je fais un test et si il n'est pas valide je voudrais passer directement au bloc End, est ce que cela est possible ? a partir de quelle version ?

Car la, la seule solution que je vois et la suivante

[code:1]
Function Test {
Begin {
Write-Host \"Begin\"
$CanDoProcess = $True
If (\"Test detecte Erreur\"«») {
$CanDoProcess = $False
}
}

Process {
If ($CanDoProcess) {
Write-Host \"Process\"
}
}

End {
Write-Host \"End\"
}
}
[/code:1]

Et le exit dans le bloc Begin n'est pas spécialement propre ...
Puis j'ai peur que si on a un trés grand nombre de données (énormement), on perd le temps d'exécution du If ($CanDoProcess) { } pour rien /

Think-MS : (Get-Life).Days | %{ Learn-More }

\\"Problems cannot be solved by the same level of thinking that created them.\\" - Albert Einstein

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

Plus d'informations
il y a 5 ans 2 semaines #20177 par Laurent Dardenne
Richard Lazaro écrit:

Dans le Begin, je fais un test et s'l n'est pas valide je voudrais passer directement au bloc End,

Non, pas de jump dans le pipeline. Tu implémentes le bloc process ou pas. Dans la négative tu cumules les données dans le bloc End ($Input).
Je ne pense pas que l'on puisse modifier dynamiquement le comportement, en tout cas moi je ne sais pas faire, quelqu'un d'autre peut-être.

Sinon utiliser la classe SteppablePipeline ?
Richard Lazaro écrit:

Et le exit dans le bloc Begin

Lequel ?
L'usage d'Exit dans un pipeline le stoppe il me semble. A vérifier.
Richard Lazaro écrit:

on perd le temps d'exécution du If ($CanDoProcess) { } pour rien

Au niveau assembleur cela reste un test 0/1 très rapide. Un code inutile rapide :-)

Je ne sais pas si ton code est proche d'un Where ou d'un Foreach, sans ton contexte, l'objectif visé et le comportement attendu de la fonction dans le pipeline(on peut supposer qu'elle peut ne pas l'utiliser) ce n'est pas facile de répondre, si toutefois le lecteur a la réponse :-)

Tutoriels PowerShell

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

Plus d'informations
il y a 3 ans 4 semaines #23736 par jretif
Bonjour, je suis désolé de déterrer un vieux sujet, mais j'ai eu le même problème et j'ai pu m'en sortir de la façon suivante. Tu peux utiliser un Return pour sauter ton Bloc Process. Car le Exit tout comme le Break te fera sortir de la fonction et du script.

[code:1]
Process
{

If ($CanDoProcess)
{
Write-Host \"Process\"
}
else
{
return
}

}
[/code:1]

Message édité par: jretif, à: 8/06/17 18:22<br><br>Message édité par: jretif, à: 8/06/17 18:22

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

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