Question pb avec les retours de fonction

Plus d'informations
il y a 11 ans 2 mois #18821 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

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

Plus d'informations
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

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

Plus d'informations
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

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

Plus d'informations
il y a 11 ans 2 mois #18827 par Laurent Dardenne
lawiss écrit:

le probleme vient du fait que la fonction New-item renvoie une valeur, que je ne souhaite pas traiter

Par défaut cela équivaut à un appel à Write-Output.
lawiss écrit:

j'ai beau me forcer, je ne trouve pas ce fonctionnement normal!

En utilisant Powershell, il faut faire avec ce principe de base.
lawiss écrit:

c'est une enorme source de bug, notamment qd on utilise des bibliotheques qu'on ne connait pas trop

En débutant peut être, mais avec la pratique on évite ce type de bug.
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:

y a t'il un moyen pour forcer return à ne renvoyer que la variable qui lui est transmise ?

C'est ce que cette instruction fait.Ici le 'problème' (un comportement) n'est pas dans Return mais dans la conception de Powershell.

Tutoriels PowerShell

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

Plus d'informations
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

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

Plus d'informations
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

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

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