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 :

Echappement d'une chaine en paramètre [PowerShell]


Sujet :

Scripts/Batch

  1. #1
    Membre actif
    Inscrit en
    Octobre 2005
    Messages
    908
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 908
    Points : 271
    Points
    271
    Par défaut Echappement d'une chaine en paramètre
    Bonjour,

    J'ai un problème pour le passage de paramètre à un script.
    Si j'exécute le script suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     .\videos.ps1 "\\127.0.0.1\Public\A la pêche" "C:\Users\MOI"
    videos.ps1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Param(
    	[string]$path_dest="\\127.0.0.1\Public\A la pêche",
    	[string]$path_src="C:\Users"
    )
    Cls
    
    Write-Host "SRC="$path_src
    Write-Host "DEST="$path_dest
    Les 2 chaines sont coupées :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SRC= la
    DEST= \\127.0.0.1\Public\A
    Comment les avoir entières ?
    Merci d'avance


  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,
    ton code fonctionne sauf si tu ne délimites pas les chaînes de caractères.

  3. #3
    Membre actif
    Inscrit en
    Octobre 2005
    Messages
    908
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 908
    Points : 271
    Points
    271
    Par défaut
    Pour moi aussi, ça devrait marcher !
    sauf que malgré l'utilisation des guillemets :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .\videos.ps1 "\\127.0.0.1\Public\A la pêche" "C:\Users\MOI"
    J'ai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SRC=la
    DEST= \\127.0.0.1\Public\A
    au lieu de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SRC=C:\Users\MOI
    DEST= \\127.0.0.1\Public\A la pêche

  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
    ,peut être as-tu un pb d'encodage entre le script et la ligne de commande.

  5. #5
    Membre actif
    Inscrit en
    Octobre 2005
    Messages
    908
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 908
    Points : 271
    Points
    271
    Par défaut
    J'y ai pensé...

    mais la commande (sans espace) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .\videos.ps1 "\\127.0.0.1\Public\pêche" "C:\Users\MOI"
    me génère (correctement) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SRC= C:\Users\MOI
    DEST= \\127.0.0.1\Public\pêche
    Mon fichier videos.ps1 est en Windows/ANSI

  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
    Au cas où, que renvoie ces cmd :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    get-culture|fl *
    $OutputEncoding

  7. #7
    Membre actif
    Inscrit en
    Octobre 2005
    Messages
    908
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 908
    Points : 271
    Points
    271
    Par défaut
    get-culture|fl *
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    Parent                         : fr
    LCID                           : 1036
    KeyboardLayoutId               : 1036
    Name                           : fr-FR
    IetfLanguageTag                : fr-FR
    DisplayName                    : Français (France)
    NativeName                     : français (France)
    EnglishName                    : French (France)
    TwoLetterISOLanguageName       : fr
    ThreeLetterISOLanguageName     : fra
    ThreeLetterWindowsLanguageName : FRA
    CompareInfo                    : CompareInfo - 1036
    TextInfo                       : TextInfo - 1036
    IsNeutralCulture               : False
    CultureTypes                   : SpecificCultures, InstalledWin32Cultures, FrameworkCultures
    NumberFormat                   : System.Globalization.NumberFormatInfo
    DateTimeFormat                 : System.Globalization.DateTimeFormatInfo
    Calendar                       : System.Globalization.GregorianCalendar
    OptionalCalendars              : {System.Globalization.GregorianCalendar}
    UseUserOverride                : True
    IsReadOnly                     : False
    $OutputEncoding
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    IsSingleByte      : True
    BodyName          : us-ascii
    EncodingName      : US-ASCII
    HeaderName        : us-ascii
    WebName           : us-ascii
    WindowsCodePage   : 1252
    IsBrowserDisplay  : False
    IsBrowserSave     : False
    IsMailNewsDisplay : True
    IsMailNewsSave    : True
    EncoderFallback   : System.Text.EncoderReplacementFallback
    DecoderFallback   : System.Text.DecoderReplacementFallback
    IsReadOnly        : True
    CodePage          : 20127

  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
    Je ne pense pas pouvoir faire plus pour t'aider, à moins de recréer ton script sous PS ou d'exécuter PS avec -NoProfile, voir de placer de guillemets sur l'appel à Write-host :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Write-Host "SRC=" "$path_src"
    Quelle version de PS utilises-tu et sous quel OS ?

  9. #9
    Membre actif
    Inscrit en
    Octobre 2005
    Messages
    908
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 908
    Points : 271
    Points
    271
    Par défaut
    Merci quand même Laurent.

    sous W7 Pro SP1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    > $PSVersionTable
    
    Name                           Value
    ----                           -----
    CLRVersion                     2.0.50727.5485
    BuildVersion                   6.1.7601.17514
    PSVersion                      2.0
    WSManStackVersion              2.0
    PSCompatibleVersions           {1.0, 2.0}
    SerializationVersion           1.1.0.1
    PSRemotingProtocolVersion      2.1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Write-Host "SRC=$path_src"
    Write-Host "DEST=$path_dest"
    ne marchent pas mieux...


  10. #10
    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
    Vérifie si ce code fonctionne de manière attendue :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    Function Test {
    Param(
        [string]$path_dest,
        [string]$path_src
    )
    Cls
    
    Write-Host "SRC="$path_src
    Write-Host "DEST="$path_dest
    
    Write-Warning $path_src
    Write-Warning $path_dest
    $Args.Count
    "Remaing args = $args"
    } 
    
    test "\\127.0.0.1\Public\A la pêche" "C:\Users\MOI"  ceci reste
    # SRC= C:\Users\MOI
    # DEST= \\127.0.0.1\Public\A la pêche
    # AVERTISSEMENT : C:\Users\MOI
    # AVERTISSEMENT : \\127.0.0.1\Public\A la pêche
    # 2
    # Remaing args = ceci reste
    
    test "\\127.0.0.1\Public\A la pêche" "C:\Users\MOI"   
    # SRC= C:\Users\MOI
    # DEST= \\127.0.0.1\Public\A la pêche
    # AVERTISSEMENT : C:\Users\MOI
    # AVERTISSEMENT : \\127.0.0.1\Public\A la pêche
    # 0
    # Remaing args =

  11. #11
    Membre actif
    Inscrit en
    Octobre 2005
    Messages
    908
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 908
    Points : 271
    Points
    271
    Par défaut
    J'ai les mêmes résultats que toi !
    Le passage de paramètres à une "fonction" n'est pas le même qu'à un script ???

  12. #12
    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 Tchupacabra Voir le message
    Le passage de paramètres à une "fonction" n'est pas le même qu'à un script ?
    Si, je voulais m'assurer que ce n'était pas dû au paramètrage de la console.

    Si tu as un éditeur hexa vérifie le texte de la clause Param, tu peux avoir des surprises.
    Ou comme je te le disais réécrit ton script en UTF8 (sans copier/coller).

  13. #13
    Membre actif
    Inscrit en
    Octobre 2005
    Messages
    908
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 908
    Points : 271
    Points
    271
    Par défaut
    en ANSI :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    50 61 72 61 6d 28 0d 0a 09 5b 73 74 72 69 6e 67 | Param(...[string
    5d 24 70 61 74 68 5f 64 65 73 74 3d 22 54 45 53 | ]$path_dest="TES
    54 20 50 41 54 48 20 44 45 53 54 22 2c 0d 0a 09 | T PATH DEST",...
    5b 73 74 72 69 6e 67 5d 24 70 61 74 68 5f 73 72 | [string]$path_sr
    63 3d 22 54 45 53 54 20 50 41 54 48 20 53 52 43 | c="TEST PATH SRC
    22 0d 0a 29                                                    | "...)
    même chose après conversion en UTF-8 (sans BOM) !

    Du coup, tout me parait normal...

  14. #14
    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 Tchupacabra Voir le message
    Du coup, tout me parait normal...
    J'ai un doute sur l'appel à Write-host.
    Une fois réécrit, le script fonctionne-t-il ?

  15. #15
    Membre actif
    Inscrit en
    Octobre 2005
    Messages
    908
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 908
    Points : 271
    Points
    271
    Par défaut


    J'ai trouvé !!!
    en faite, ma commande commencée par powershell, c'est à dire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    powershell .\videos.ps1 "\\127.0.0.1\Public\A la pêche" "C:\Users\MOI"
    alors que j'étais déjà dans une fenêtre powershell ...


  16. #16
    Membre actif
    Inscrit en
    Octobre 2005
    Messages
    908
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 908
    Points : 271
    Points
    271
    Par défaut
    en tout cas, merci Laurent pour ton aide !!

  17. #17
    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 Tchupacabra Voir le message

    J'ai appris une chose.
    En dernier recourt, je pensais appeler un chaman

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

Discussions similaires

  1. [2.x] Définir une chaine en paramètre global
    Par Mister Nono dans le forum Symfony
    Réponses: 2
    Dernier message: 27/04/2014, 17h28
  2. appel de fonction avec une chaine en paramètre
    Par sebac dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 12/01/2012, 15h59
  3. Réponses: 7
    Dernier message: 20/08/2011, 12h57
  4. passage d'une chaine de paramètres à une fonction
    Par unmulot dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 01/10/2010, 18h20
  5. [XSL] Problème d'echappement dans une chaine de caractère
    Par thierry_b dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 03/03/2009, 09h49

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