Question Comment définir une fonction ? (Résolu)

Plus d'informations
il y a 17 ans 2 mois #3736 par Pazefur
Réponse de Pazefur sur le sujet Re:Lancer une commande
Merci pour tes précieuses explications je pense avoir pigé le truc :)

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

Plus d'informations
il y a 17 ans 2 mois #3746 par Arnaud Petitjean
Réponse de Arnaud Petitjean sur le sujet Re:Lancer une commande
Salut !

Moi ce que j'aime avec PowerShell c'est qu'on en apprend tous les jours :laugh:. Ca va vous parraître dingue mais je me souvenais pas qu'on pouvait définir une fonction de cette manière :

[code:1]function add ([int]$a,[int]$b) {
$a + $b
}[/code:1]

Ce n'est donc pas une manière de faire que j'apprend à mes élèves (eh, oui je suis devenu formateur PowerShell de temps à autres ;-), lorsque mon emploi du temps me le permet).

Ce que j'enseigne c'est l'utilisation des arguments et des paramètres; à savoir pour utiliser les arguments :

[code:1]function add {
$args[0] + $args[1]
}[/code:1]

Ce qu'il faut savoir c'est que les arguments de la ligne de commande sont stockés dans le tableau $args. On ajoute donc le premier élément du tableau avec le second.

Version avec les paramètres:
[code:1]function add {
param ([int]$a,[int]$b)
$a + $b
}[/code:1]

Utilisation :
[code:1]PS> add 3 2[/code:1]
ou
[code:1]PS> add -a 3 -b 2[/code:1]

L'utilisation des paramètres donne plus de souplesse aux fonctions; entre autres on peut inverser leur ordre lors de l'appel de la fonction. Mais aussi les initialiser au cas ou l'on oublie de fournir une valeur.

Exemple :

[code:1]function add {
param ([int]$a=3, [int]$b=2)
$a + $b
}[/code:1]

Utilisation :
[code:1]PS> add
5[/code:1]

Bon apprentissage de PowerShell... ;-)

Arnaud<br><br>Message édité par: Arnaud, à: 15/01/09 22:31

MVP PowerShell et créateur de ce magnifique forum :-)
Auteur de 6 livres PowerShell aux éditions ENI
Fondateur de la société Start-Scripting
Besoin d'une formation PowerShell ?

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

Plus d'informations
il y a 17 ans 2 mois #3754 par Laurent Dardenne
Réponse de Laurent Dardenne sur le sujet Re:Lancer une commande
Allez, une dernière pour la route !
Arnaud écrit:

Ce qu'il faut savoir c'est que les arguments de la ligne de commande sont stockés dans le tableau $args.

On peut aussi combiner les 2 approches :
[code:1]
$ScriptBlock={ $args|Foreach {Write \&quot;args : $_\&quot;}}
&amp;$ScriptBlock 1 2 3
#1
#2
#3
function add ([int]$a,[int]$b) {
$a + $b
&amp;$ScriptBlock $args[0] $args[1] $args[2] #etc
}

add 1 2 3 a b
# 3
# args : 3
# args : a
# args : b
[/code:1]
Ce qui permet des scripts/fonctions/ScriptBlock avec un nombre de paramètres variable. Mais ce n'est pas d'un usage quotidien :)

Tutoriels PowerShell

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

Plus d'informations
il y a 17 ans 2 mois #3755 par Jacques Barathon
Réponse de Jacques Barathon sur le sujet Re:Lancer une commande
Pour compléter les explications de Laurent et d'Arnaud, le tableau $args récupère tous les arguments qui n'ont pas été \&quot;consommés\&quot; par des paramètres explicitement précisés dans la définition de la fonction. On n'a pas forcément besoin de passer par un scriptblock comme dans l'exemple fourni par Laurent.

[code:1]
function list ($title = \&quot;sans titre\&quot;«»)
{
\&quot;Liste $title : $($args.length) objet(s)\&quot;
if ($args.length) {\&quot;Objet(s) listé(s):\&quot;;$args}
}

PS&gt; list courses moutarde sel café
Liste courses : 3 objet(s)
Objet(s) listé(s):
moutarde
sel
café

PS&gt; list
Liste sans titre : 0 objet(s)
[/code:1]
Dans la fonction list ci-dessus, seul le paramètre $title est explicitement précisé. Les autres paramètres (s'il y en a) vont implicitement dans le tableau $args.

Janel<br><br>Message édité par: janel, à: 16/01/09 12:25

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

Plus d'informations
il y a 17 ans 2 mois #3757 par Laurent Dardenne
Réponse de Laurent Dardenne sur le sujet Re:Lancer une commande
janel écrit:

On n'a pas forcément besoin de passer par un scriptblock comme dans l'exemple fourni par Laurent.

C'est vrai.
Ce que je voulais mettre en évidence mais c'est raté, c'est que le tableau $args n'est pas construit seulement lorsqu'on utilise la ligne de commande mais lors de tous passage de paramètre à un bloc de code( ligne de commande/script/fonction/scriptblock).

On va finir par y arriver :lol:

Tutoriels PowerShell

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

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