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 :

Comment passer une string "par référence" dans une fonction ? [PowerShell]


Sujet :

Scripts/Batch

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Février 2007
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 49
    Points : 91
    Points
    91
    Par défaut Comment passer une string "par référence" dans une fonction ?
    Bonjour,

    Je débute en Powershell et je n'arrive pas à faire un truc tout bête : modifier une string passée comme argument dans une fonction (passage par référence) :

    example :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    function ChangeString([string]$StringToChange)
    {
        $StringToChange = "B"
        return $StringToChange
    }
    
    $s="A"
    ChangeString($s)
    write-host $s
    Cela me renvoie dans la console B A, au lieu de B B
    J'ai essayé de mettre (ce qui ne me parait pas logique vu que string est un type référence) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    function ChangeString([ref]$StringToChange)
    Ce qui me renvoie l'erreur
    ChangeString : Impossible de traiter la transformation d'argument sur le paramètre «*StringToChange*». L'argument attend un type référence.
    Help

  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
    Salut,
    Citation Envoyé par Plageman
    modifier une string passée comme argument dans une fonction (passage par référence)
    PowerShell ce n'est pas du C#, mais [REF] existe bien.
    Attention :
    Avec cet appel tu risques de passer un tableau, si tu as + paramètres.
    Pour utiliser une référence il faut déclarer la variable en tant que type référence ( PSReference) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    function ChangeString([ref]$StringToChange)
    {
      $StringToChange.Value = "By ref"
    }
    [ref]$s2="A"
    $S2
    $S2|gm
    ChangeString $s2
    write-host $s2
    write-host $s2.Value
    La présence de .Value rend son usage un peu contraignant.
    On peut aussi procéder ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    function ChangeString([ref]$StringToChange)
    {
      $StringToChange.Value = "By ref"
    }
    $s3="A"
    ChangeString ([REF]$s3) # Opération de cast, () est ici un groupe
    write-host $s3

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Février 2007
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 49
    Points : 91
    Points
    91
    Par défaut
    Merci pour ces éclaircissements

    PowerShell ce n'est pas du C#
    C'est vrai que j'ai tendance à tenter à vouloir faire comme en C# alors que ce n'est pas du tout la même "philosophie". De la même manière le fonctionnement du return d'une fonction powershell m'avait surpris...

  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 Plageman
    C'est vrai que j'ai tendance à tenter à vouloir faire comme en C# alors que ce n'est pas du tout la même "philosophie".
    Tout à fait, à mon avis PS est plus proche de LINQ (pipeline).
    Citation Envoyé par Plageman
    De la même manière le fonctionnement du return d'une fonction powershell m'avait surpris...
    Return est bien un saut, mais si la fonction renvoie un seul objet à un seul endroit on peut ne pas le préciser, car dans tous les cas la valeur de retour est émise dans le pipeline. Par contre pour coder une fonction récursive son usage est nécessaire.
    De mon coté je ne l'utilise que rarement, tout comme [REF].

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 5
    Points : 5
    Points
    5
    Par défaut
    Il faut changer [ref] par [string]

  6. #6
    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
    Salut,
    Citation Envoyé par theo77186 Voir le message
    Il faut changer [ref] par [string]
    Tu peux préciser ?

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 5
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par Laurent Dardenne Voir le message
    Salut,

    Tu peux préciser ?
    [string] est une type de donnée qui contient une chaîne

  8. #8
    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 theo77186 Voir le message
    [string] est une type de donnée qui contient une chaîne
    D'accord, et donc ?

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 17/10/2014, 16h08
  2. Remplacer un caractère par un autre dans une String
    Par djack44 dans le forum Débuter avec Java
    Réponses: 7
    Dernier message: 12/03/2008, 15h16
  3. Remplacer des balises par des valeurs dans une String
    Par RadicalBob dans le forum Langage
    Réponses: 4
    Dernier message: 26/04/2007, 15h22
  4. Réponses: 3
    Dernier message: 05/10/2006, 18h52

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