Question
pb avec les retours de fonction
- lawiss
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 8
- Remerciements reçus 0
il y a 11 ans 2 mois #18821
par lawiss
pb avec les retours de fonction a été créé par lawiss
Bonjour à tous
Un probleme me tracasse à propos du mot clé return
En fin de fonction, je renvoie une valeur en utilisant return. (normal, jusque la )
Dans certains cas, je recois en plus de la variable passé à return, d'autres elements
ex:
function createFile
{
$name=''
for ($i=0;$i -lt 8;$i++) { $name+=[int](Get-Random -Maximum 10) }
$name+='.txt'
try
{ New-Item -type 'file' -Path 'C:\temp\' -Name $name
return $name
}
catch { return $null }
}
cette fonction créé un fichier avec un nom qu'elle genere, puis renvoie le nom du fichier créé.
pourtant, le retour n'est pas correct:
retour de createFile
C:\temp\59884962.txt 59884962.txt
resultat attendu:
59884962.txt
le probleme vient du fait que la fonction New-item renvoie une valeur, que je ne souhaite pas traiter
pour avoir le resultat correct, je dois rediriger la commade New-Item ainsi
New-Item -type 'file' -Path 'C:\temp\' -Name $name | Out-Null
j'ai beau me forcer, je ne trouve pas ce fonctionnement normal!
c'est une enorme source de bug, notamment qd on utilise des bibliotheques qu'on ne connait pas trop (je travaille actuellement sur Azure, c'est deja assez compliqué pour moi, pour pas en rajouter!)
d'ou ma question:
y a t'il un moyen pour forcer return à ne renvoyer que la variable qui lui est transmise?
cela m'enviterai d'encombrer mon code avec des '| out-null'
merci d'avance pour toute suggestion
bonne fin de journee
Un probleme me tracasse à propos du mot clé return
En fin de fonction, je renvoie une valeur en utilisant return. (normal, jusque la )
Dans certains cas, je recois en plus de la variable passé à return, d'autres elements
ex:
function createFile
{
$name=''
for ($i=0;$i -lt 8;$i++) { $name+=[int](Get-Random -Maximum 10) }
$name+='.txt'
try
{ New-Item -type 'file' -Path 'C:\temp\' -Name $name
return $name
}
catch { return $null }
}
cette fonction créé un fichier avec un nom qu'elle genere, puis renvoie le nom du fichier créé.
pourtant, le retour n'est pas correct:
retour de createFile
C:\temp\59884962.txt 59884962.txt
resultat attendu:
59884962.txt
le probleme vient du fait que la fonction New-item renvoie une valeur, que je ne souhaite pas traiter
pour avoir le resultat correct, je dois rediriger la commade New-Item ainsi
New-Item -type 'file' -Path 'C:\temp\' -Name $name | Out-Null
j'ai beau me forcer, je ne trouve pas ce fonctionnement normal!
c'est une enorme source de bug, notamment qd on utilise des bibliotheques qu'on ne connait pas trop (je travaille actuellement sur Azure, c'est deja assez compliqué pour moi, pour pas en rajouter!)
d'ou ma question:
y a t'il un moyen pour forcer return à ne renvoyer que la variable qui lui est transmise?
cela m'enviterai d'encombrer mon code avec des '| out-null'
merci d'avance pour toute suggestion
bonne fin de journee
Connexion ou Créer un compte pour participer à la conversation.
- Philippe
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 1778
- Remerciements reçus 21
il y a 11 ans 2 mois #18825
par Philippe
Réponse de Philippe sur le sujet Re:pb avec les retours de fonction
salut lawiss
si tu regarde la documentation de new-item tu verra qu'il renvoie le nom du fichier ou dossier créé.
tu n'a donc pas d'autre choix que la solution que tu propose soit | out-null
si tu regarde la documentation de new-item tu verra qu'il renvoie le nom du fichier ou dossier créé.
tu n'a donc pas d'autre choix que la solution que tu propose soit | out-null
Connexion ou Créer un compte pour participer à la conversation.
- Philippe
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 1778
- Remerciements reçus 21
il y a 11 ans 2 mois #18826
par Philippe
Réponse de Philippe sur le sujet Re:pb avec les retours de fonction
petit complement :
powershell affiche tous ce que renvoie une fonction meme si c'est pas apres un return
mais tous ne passe pas dans le pipeline utilisé par les objet powershell
powershell affiche tous ce que renvoie une fonction meme si c'est pas apres un return
mais tous ne passe pas dans le pipeline utilisé par les objet powershell
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 11 ans 2 mois #18827
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:pb avec les retours de fonction
lawiss écrit:
lawiss écrit:
lawiss écrit:
Les tests permettent justement de contrôler la ou les valeurs de retour.
Quant aux bibliothèques de cmdlet il faut lire la doc :
[code:1]
$r=get-help new-item;$r.returnValues
# System.Object
# New-Item retourne l'élément qu'elle crée.
$r=get-help Out-Host;$r.returnValues
# None
# Out-Host does not generate any output. However, the host might display the objects that Out-Host sends to it.
[/code:1]
Et pour les méthodes vérifier leur signature :
[code:1]
$T=new-Object System.Collections.ArrayList
$T.Add
# OverloadDefinitions
#
# int Add(System.Object value) #RENVOI un entier
# int IList.Add(System.Object value)
$T.Clear
# OverloadDefinitions
#
# void Clear() #Ne renvoi RIEN
# void IList.Clear()
[/code:1]
lawiss écrit:
Par défaut cela équivaut à un appel à Write-Output.le probleme vient du fait que la fonction New-item renvoie une valeur, que je ne souhaite pas traiter
lawiss écrit:
En utilisant Powershell, il faut faire avec ce principe de base.j'ai beau me forcer, je ne trouve pas ce fonctionnement normal!
lawiss écrit:
En débutant peut être, mais avec la pratique on évite ce type de bug.c'est une enorme source de bug, notamment qd on utilise des bibliotheques qu'on ne connait pas trop
Les tests permettent justement de contrôler la ou les valeurs de retour.
Quant aux bibliothèques de cmdlet il faut lire la doc :
[code:1]
$r=get-help new-item;$r.returnValues
# System.Object
# New-Item retourne l'élément qu'elle crée.
$r=get-help Out-Host;$r.returnValues
# None
# Out-Host does not generate any output. However, the host might display the objects that Out-Host sends to it.
[/code:1]
Et pour les méthodes vérifier leur signature :
[code:1]
$T=new-Object System.Collections.ArrayList
$T.Add
# OverloadDefinitions
#
# int Add(System.Object value) #RENVOI un entier
# int IList.Add(System.Object value)
$T.Clear
# OverloadDefinitions
#
# void Clear() #Ne renvoi RIEN
# void IList.Clear()
[/code:1]
lawiss écrit:
C'est ce que cette instruction fait.Ici le 'problème' (un comportement) n'est pas dans Return mais dans la conception de Powershell.y a t'il un moyen pour forcer return à ne renvoyer que la variable qui lui est transmise ?
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- lawiss
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 8
- Remerciements reçus 0
il y a 11 ans 2 mois #18830
par lawiss
Réponse de lawiss sur le sujet Re:pb avec les retours de fonction
Merci d'abord pour vos reponses
je continue avec les | out-null alors, qd je n'ai pas besoin du retour, puisqu'il n'y a pas le choix
et merci pour l'astuce rapide
$r=get-help Out-Host;$r.returnValues
ca va bien m'aider
je continue avec les | out-null alors, qd je n'ai pas besoin du retour, puisqu'il n'y a pas le choix
et merci pour l'astuce rapide
$r=get-help Out-Host;$r.returnValues
ca va bien m'aider
Connexion ou Créer un compte pour participer à la conversation.
- lawiss
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 8
- Remerciements reçus 0
il y a 11 ans 2 mois #18832
par lawiss
Réponse de lawiss sur le sujet Re:pb avec les retours de fonction
Merci d'abord pour vos reponses
je continue avec les | out-null alors, qd je n'ai pas besoin du retour, puisqu'il n'y a pas le choix
et merci pour l'astuce rapide
$r=get-help Out-Host;$r.returnValues
ca va bien m'aider
je continue avec les | out-null alors, qd je n'ai pas besoin du retour, puisqu'il n'y a pas le choix
et merci pour l'astuce rapide
$r=get-help Out-Host;$r.returnValues
ca va bien m'aider
Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.060 secondes
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- pb avec les retours de fonction