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 :

String ou pas String ?


Sujet :

Scripts/Batch

  1. #1
    Membre Expert
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    941
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 941
    Par défaut String ou pas String ?
    Bonjour,

    Je vous présente $addr:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    [DBG]: PS G:\>>> $addr
    machine@bidule.com
    $addr est une String:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    [DBG]: PS G:\>>> $addr.getType()
    
    IsPublic IsSerial Name                                     BaseType                                                                                    
    -------- -------- ----                                     --------                                                                                    
    True     True     String                                   System.Object
    Le problème:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    [DBG]: PS G:\>>> Set-ADUser $username -Replace @{'info'=$addr}
    Type non valide « System.Management.Automation.PSObject ».
    Nom du paramètre*: info
    Au niveau de ligne*: 1 Caractère*: 11
    + Set-ADUser <<<<  $username -Replace @{'info'=$addr}
        + CategoryInfo          : InvalidArgument: (machin:ADUser) [Set-ADUser], ArgumentException
        + FullyQualifiedErrorId : Type non valide « System.Management.Automation.PSObject ».
    Nom du paramètre*: info,Microsoft.ActiveDirectory.Management.Commands.SetADUser
    Après une heure de débogage:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [DBG]: PS G:\>>> Set-ADUser $username -Replace @{'info'=$addr.ToString()}
    Ca passe...

    Pour être sûr:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    [DBG]: PS G:\>>> $addr.getType() -eq $addr.ToString().getType()
    True
    
    [DBG]: PS G:\>>> $addr -eq $addr.ToString()
    True
    C'est reproductible et à un autre endroit dans le code j'ai du également utiliser $addr.ToString() pour résoudre un problème similaire.

    Comment est-ce possible ?

    Y a-t-il plusieurs types String identiques en apparence mais différents ?

    Suis-je condamné à sombrer dans la folie si je continue à utiliser PowerShell ?

    La génération de la valeur de $addr est un peu longue mais la seule partie sur laquelle j'ai un doute est une fonction que j'ai reprise du Web pour enlever les accents et autres diacritiques:
    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
    function Remove-Diacritics {
    param ([String]$src = [String]::Empty)
    
        foreach ($s in $src) {
            if ($s -eq $null) { return [String]::Empty }
            $s = $s.Normalize("FormD")
            $s.ToCharArray() | % {
                $uCategory = [Globalization.CharUnicodeInfo]::GetUnicodeCategory($_)
                if ($uCategory -ne "NonSpacingMark") {
                    $res += $_
                }
            }
            return $res
        }
    }
    Est-ce que cela pourrait venir de là ?

  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
    Billets dans le blog
    1
    Par défaut
    Salut,
    Citation Envoyé par dividee Voir le message
    Je vous présente $addr:
    bonjour $addr
    Citation Envoyé par dividee Voir le message
    Comment est-ce possible ?
    Peut être un pb avec le parseur.
    Essai de passer une hashtable en la définissant au préalable.
    Citation Envoyé par dividee Voir le message
    Y a-t-il plusieurs types String identiques en apparence mais différents ?
    Non.
    Citation Envoyé par dividee Voir le message
    Suis-je condamné à sombrer dans la folie si je continue à utiliser PowerShell ?
    Powershell c'est pas tjr facile, mais avant sombrer dans la folie tu peux consulter
    Citation Envoyé par dividee Voir le message
    Est-ce que cela pourrait venir de là ?
    Je ne pense pas. Essai de tracer le binding du cmdlet Set-ADuser, peut être y trouveras-tu une explication :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Trace-Command parameterbinding {Set-ADUser $username -Replace @{'info'=$addr}} -pshost

Discussions similaires

  1. [Toutes versions] Retour de la constante xl en string et pas en numeric
    Par patricktoulon dans le forum Macros et VBA Excel
    Réponses: 14
    Dernier message: 05/04/2015, 00h26
  2. Liste de string (comprend pas O_o)
    Par zouuc dans le forum C#
    Réponses: 10
    Dernier message: 04/10/2010, 12h03
  3. Conversion string char[] pas très propre
    Par pasqual dans le forum Débuter
    Réponses: 4
    Dernier message: 17/09/2009, 08h19
  4. strings séparé pas point virgule
    Par Zikas-r dans le forum Langage SQL
    Réponses: 5
    Dernier message: 20/05/2009, 15h47
  5. Réponses: 7
    Dernier message: 29/06/2007, 07h45

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