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 :

[OFFICE365] passage de powershell v2 a powershell v5 bug sur un foreach


Sujet :

Scripts/Batch

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    173
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 173
    Par défaut [OFFICE365] passage de powershell v2 a powershell v5 bug sur un foreach
    Bonjour,

    j'avais concu sous powershell v2 un script pour office365 qui fonctionnais tres bien, mais makheuresment suite a un chnagement de version le script genere des erreur sur mes boucle foreach

    quel'un peut il me dire ce qui ne va pas :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Au caractère monscript.ps1:27 : 12
    + foreach ($_.DistributionGroup in $($importuser|select DistributionGro ...
    +            ~
    « in » manquant après la variable dans la boucle foreach.
    Au caractère caractère monscript.ps1:27 : 104
    + ... $importuser|select DistributionGroup -unique|sort DistributionGroup))
    +                                                                         ~
    Jeton inattendu « ) » dans l’expression ou l’instruction.
    Au caractère caractère monscript.ps1:45 : 12
    + foreach ($_.Name in $($currentresult| where {$_.sideindicator -eq "=> ...
    +            ~
    le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    ligne27 :
    foreach ($_.DistributionGroup in $($importuser|select DistributionGroup -unique|sort DistributionGroup))
    
    ligne 45 :
    $currentresult=compare-object -referenceobject $($importuser| where {$_.Distributiongroup -eq $currentgroup}|select Name| Sort Name) -differenceobject $(Get-DistributionGroupMember -identity $currentgroup -resultsize unlimited|select Name|Sort Name) -Property Name
    foreach ($_.Name in $($currentresult| where {$_.sideindicator -eq "=>"}) ){

    en vous remerciant,

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    105
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2007
    Messages : 105
    Par défaut
    Bonjour,

    J'aurais tendance à modifier le nom des variables "$_.DistributionGroup" et "$_.Name".

    Car les variables automatiques tel que $_ ou $PSItem (à partir de la version 3 de PowerShell) font références à l'objet courant dans une suite de commandes séparées par une barre verticale ou "pipe" (|).

    Tu trouveras plus d'informations, par exemple sur SS64.com: Automatic Variables

    Et sur cette page du MSDN concernant la syntaxe de la boucle ForEach: About ForEach

    Salutations.

  3. #3
    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 aepli Voir le message
    J'aurais tendance à modifier le nom des variables "$_.DistributionGroup" et "$_.Name".
    Ce serait effectivement plus lisible, mais le renommage ne change rien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $i=1|select name
    foreach($i.name in 1..5){$i}
    Ce code fonctionne en v2, mais $I est du type Int et pas un psCustomobect avec une propriété Name.
    Cela semble être une correction de bug qui se transforme en breaking change.
    Pour la variable de boucle, les specs de PS parle de variable et pas d'un membre d'une variable (une propriété) et si la variable de boucle n'existe pas, elle est créé.

    Comme on ne connais pas le code, tu peux faire ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $DistributionGroup=$null
    foreach ($DistributionGroup in $($importuser|select DistributionGroup -unique|sort DistributionGroup))
    Dans ton cas tu as de la chance car c'est une erreur de parsing

  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
    Billets dans le blog
    1
    Par défaut
    Pour info, le message est plus explicite dans ce cas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Foreach($($i) in 1..5{$i}
    Missing variable name after foreach.

Discussions similaires

  1. Réponses: 1
    Dernier message: 13/07/2017, 17h49
  2. [Powershell] Filtrer en powershell
    Par johnbobby dans le forum Scripts/Batch
    Réponses: 2
    Dernier message: 10/10/2012, 17h15
  3. Passage version perl 5.10 à 5.8.5 sur Ubuntu 9.10 Karmic
    Par Jane Home dans le forum Langage
    Réponses: 6
    Dernier message: 25/02/2010, 11h14
  4. Réponses: 4
    Dernier message: 07/05/2007, 12h30
  5. Réponses: 9
    Dernier message: 15/05/2006, 14h29

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