IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Scripts/Batch Discussion :

Appel de fonction dynamique avec passage argument objet [PowerShell]


Sujet :

Scripts/Batch

  1. #1
    Membre expert
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 725
    Points : 3 338
    Points
    3 338
    Par défaut Appel de fonction dynamique avec passage argument objet
    Bonjour à tous,

    Je bute sur l'appel dynamique d'une fonction avec passage d'un paramètre objet.

    Aucun soucis pour l'appel dynamique d'une fonction depuis un string comme ceci :
    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $functionInString = 'MaFonction'
    Invoke-Expression $functionInString
    Mais en paramètre de ma fonction j'attends un objet de type [System.Xml.XmlElement]

    Et lorsque je fais ceci :
    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $functionInString = 'MaFonction'
    $xmlElement
    Invoke-Expression "$functionInString -ParamXML $xmlElement"
    Et bien à l'arrivé dans ma fonction $xmlElement est converti en System.String !!!

    Je n'arrive pas à garder mon objet intact au passage via Invoke-Expression.
    En revanche si j'appel ma fonction manuellement :
    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    MaFonction -ParamXML $xmlElement
    Dans ce cas aucun problème

    Merci d'avance à vous pour votre aide !
    Par pitié !!!! :Si vous ne savez pas faire cliquez ici !
    Citation Envoyé par Marc-L
    C'est dommage que parfois tu sois aussi lourd que tu as l'air intelligent…

  2. #2
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Si tu génères du code il faut retarder la substitution autant de fois que nécessaire (perso après 2 niveaux je trouve que ça devient illisible).

  3. #3
    Membre expert
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 725
    Points : 3 338
    Points
    3 338
    Par défaut
    C'est à dire ?

    Pour le moment j'ai palier au problème avec l'opérateur & :
    Code PowerShell : Sélectionner tout - Visualiser dans une fenêtre à part
    &"$functionInString" -ParamXML $xmlElement

    Mais j'aurais préféré utiliser Invoke-Expression ou Invoke-Command.

    Je ne comprends par pourquoi $xmlElement qui est un objet de type System.Xml.XmlElement se retrouve en string avec pour valeur son type System.Xml.XmlElement lorsqu'on souhaite faire ceci :
    Code PowerShell : Sélectionner tout - Visualiser dans une fenêtre à part
    "$xmlElement"
    Par pitié !!!! :Si vous ne savez pas faire cliquez ici !
    Citation Envoyé par Marc-L
    C'est dommage que parfois tu sois aussi lourd que tu as l'air intelligent…

  4. #4
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par cerede2000 Voir le message
    Je ne comprends par pourquoi $xmlElement qui est un objet de type System.Xml.XmlElement se retrouve en string avec pour valeur son type System.Xml.XmlElement lorsqu'on souhaite faire ceci :
    C'est une conversion implicite de la substitution.Si le type n'implémente pas la méthode ToString() il affiche le nom du type.
    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    $xmlElement
    #la valeur
     
    $xmlElement.ToString()
    #une autre valeur
     
    "$($xmlElement.DocumentElement)".ToString()
    #System.Xml.XmlElement
    Mais ici sans l'objet réel je ne saurais en dire plus, utilise ceci:
    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Trace-Command  -name TypeConversion  -Expression  {"$xmlElement"} -pshost

    Si tu décomposes :
    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    "$functionInString -ParamXML `$xmlElement"
    #MaFonction -ParamXML $xmlElement
    On retarde la substitution de la variable XmlElement, ainsi on obtient le code que tu veux exécuter dynamiquement.

  5. #5
    Membre expert
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 725
    Points : 3 338
    Points
    3 338
    Par défaut
    Great !
    Je ne me souvenais pas de `pour retarder !

    Le Trace-Command renvoi ceci : DÉBOGUER*: TypeConversion Information: 0 : Conversion to System.Type

    Merci à toi
    Par pitié !!!! :Si vous ne savez pas faire cliquez ici !
    Citation Envoyé par Marc-L
    C'est dommage que parfois tu sois aussi lourd que tu as l'air intelligent…

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème d'appel d'un JPanel avec passage d'argument
    Par cirilio27 dans le forum Général Java
    Réponses: 1
    Dernier message: 05/05/2010, 10h27
  2. Réponses: 4
    Dernier message: 24/08/2007, 15h56
  3. Fonction ouvre avec passage de paramètres
    Par nath-0-0 dans le forum WinDev
    Réponses: 4
    Dernier message: 20/11/2006, 12h51
  4. [Système] Appel d'un exe avec passage de paramètres
    Par licorne dans le forum Langage
    Réponses: 2
    Dernier message: 04/05/2006, 12h57
  5. Comment appeller une fonction dynamiquement, à partir d'un argument
    Par Invité dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 23/04/2006, 16h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo