none
Problème de script de création de boîtes aux lettres lié à un fichier csv RRS feed

  • Question

  • Bonjour,

    Je cherche de l'aide pour résoudre les erreurs dans mon script qui empêche la création de boîtes aux lettres.

    Après lancement du script, j'obtiens les erreurs suivantes :

    "ConvertTo-SecureString : Impossible de lier l'argument au paramètre « String », car il a la valeur Null.
    Au caractère E:\ScriptBulkMailBox.ps1:23 : 53
    + ... motdepasse = ConvertTo-SecureString -AsPlainText $i.motdepasse -Force
    +                                                      ~~~~~~~~~~~~~
        + CategoryInfo          : InvalidData : (:) [ConvertTo-SecureString], ParameterBindingValidationException
        + FullyQualifiedErrorId : ParameterArgumentValidationErrorNullNotAllowed,Microsoft.PowerShell.Commands.ConvertToSecureStringCommand

    New-Mailbox : Impossible de lier le paramètre « Name » à la cible. Exception lors de la définition de « Name » : « La valeur «   » de la propriété « Name » n’est pas valide. La valeur ne peut pas contenir d’espaces blancs de début ou de fin. »
    Au caractère E:\ScriptBulkMailBox.ps1:26 : 55
    + ... w-mailbox -firstname $Prenom -lastname $Nom -Name $NomAffiche -Userpr ...
    +                                                       ~~~~~~~~~~~
        + CategoryInfo          : WriteError: (:) [New-Mailbox], ParameterBindingException
        + FullyQualifiedErrorId : ParameterBindingFailed,Microsoft.Exchange.Management.RecipientTasks.NewMailbox

    WhatIf : Opération « Envoyer la sortie dans un fichier » en cours sur la cible « c:\Bulk_Error.log ».

    applet de commande Write-Error à la position 1 du pipeline de la commande"

    Mon script est le suivant :

    # On importe le module Microsoft Exchange
    Add-PSSnapin microsoft.exchange.management.powershell.snapin 
    # On importe les données du fichier csv dans une variable
    $data = import-csv $args[0]
    # On spécifie la variable FQDN avec extension de l'utilisateur
    $FQDN = $env:USERDNSDOMAIN
    # Traitement de la boucle pour la création des boîtes aux lettres
    foreach ($i in $data)
    {
      $Prenom = $i.Prenom
      $Nom = $i.Nom
      $NomAffiche = $i.Prenom + ' ' +$i.Nom
      $alias = $i.Prenom + '.' + $i.Nom
      $upn = $alias + "@" + $FQDN
      $ou = $i.ou
      $motdepasse = ConvertTo-SecureString -AsPlainText $i.motdepasse -Force
      $resetmotdepasse = $false
      
      new-mailbox -firstname $Prenom -lastname $Nom -Name $NomAffiche -UserprincpalName $upn -organisationalUnit $ou -Password $motdepasse -ResetpasswordonNextLogon $resetmotdepasse
    }
    Write-Error 2>> c:\Bulk_Error.log

    et le fichier CSV est de cette forme :

    Prenom;Nom;motdepasse;OU
    Jodi;Pierce;Passw0rd;"OU=Utilisateurs,OU=Champagne,DC=Champagne,DC=local"

    Normalement il devrait fonctionner vu que je copie l'exemple d'une formation sur exchange.

    Votre aide serait la bienvenue. D'avance, merci pour vos commentaires !

    Cordialement.

    samedi 27 mars 2021 13:08

Réponses

  • Bonjour Oliv the frog,

    Effectivement il ne s'agit pas de "mon" script mais  de celui que j'ai récupéré sur la formation que je suis actuellement. Mais je l'ai tout de même un peu modifié donc il est un petit peu à moi tout humblement "parlé" (bon j'avoue d'un cheveu ou d'un "point" voire d'un paramètre).

    En revanche je ne vois pas pourquoi tu dis que c'est du dos car il s'agit bien de commandes powershell.

    Merci pour tes conseils foireux et tes dons de leçons condescendants . (j'imagine que tu ne dois pas avoir grand chose non plus à cette place  👂là👂)

    Heureusement j'ai réussi à comprendre "mes" erreurs. (Problème dans "mon" fichier csv où les délimiteurs sont des ";" au lieu de virgules + ajout de "" inutiles (pb enregistrement excel sous csv) et dans le script ou certains paramètres étaient mal écrit comme "-organiZationalunit" (avec un Z comme dans biiiieZom).

    Je suis également une formation powershell et je dois reconnaître que les redirections de flux ne sont pas encore bien assimilées :p(seule apport favorable de ta part donc merci)

    Bonne journée.

    P.S.: c'est fou le temps que prennent certaines personnes pour écrire de la merde ! ^^



    mardi 30 mars 2021 11:29

Toutes les réponses


  • Write-Error 2>> c:\Bulk_Error.log

    P.S.: dans le script la redirection de flux est incorrecte mais ce n'est pas l'erreur principale. Désolée pour cet ajout de ligne inutile !


    samedi 27 mars 2021 13:32
  • bonjour MottoFabster,

    "'ConvertTo-SecureString : Impossible de lier l'argument au paramètre « String », car il a la valeur Null."

    "New-Mailbox : Impossible de lier le paramètre « Name » à la cible. Exception lors de la définition de « Name » : « La valeur «   » de la propriété « Name » n’est pas valide. La valeur ne peut pas contenir d’espaces blancs de début ou de fin."

    [... "Write-Error 2>> c:\Bulk_Error.log

    P.S.: dans le script la redirection de flux est incorrecte mais ce n'est pas l'erreur principale. Désolée pour cet ajout de ligne inutile ! ...]

    Qu'est-ce que tu ne comprends pas dans les deux 1ères phrases, c'est pourtant clair non ?


    Pour la dernière, si c'est ton formateur qui a écrit cela, ce n'est pas un bon formateur. Ce n'est pas du Powershell, mais du DOS. C'est sur qu'écrire " | Out-File -Path .....\Bulk_Error.log" c'est considérablement plus long.

    [...Je cherche de l'aide pour résoudre les erreurs dans mon script...] TON script ? Dis plutôt plus humblement, le script que tu as récupéré (rien de mal à ça), et que tu utilises à l'arrache sans même chercher à comprendre comment il fonctionne et ce qu'il fait (ça c'est pô bien, d'autant plus qu'il est largement commenté), et sans même te creuser la tête pour comprendre à la moindre erreur (les messages d'erreurs seraient écrits en sumérien, je pourrais comprendre, mais là ...). De l'aide ? Dis plutôt quelqu'un qui fera ton boulot à ta place, c'est à dire se servir de ce dont tu sembles démunis, à savoir ce que se trouve normalement localisé entre les 2 oreilles.

    Aider oui, faire le boulot gratuitement à ta place non.

    Seule et unique réponse, de ma part en tout cas, sur ce post.

    dimanche 28 mars 2021 05:28
  • Bonjour Oliv the frog,

    Effectivement il ne s'agit pas de "mon" script mais  de celui que j'ai récupéré sur la formation que je suis actuellement. Mais je l'ai tout de même un peu modifié donc il est un petit peu à moi tout humblement "parlé" (bon j'avoue d'un cheveu ou d'un "point" voire d'un paramètre).

    En revanche je ne vois pas pourquoi tu dis que c'est du dos car il s'agit bien de commandes powershell.

    Merci pour tes conseils foireux et tes dons de leçons condescendants . (j'imagine que tu ne dois pas avoir grand chose non plus à cette place  👂là👂)

    Heureusement j'ai réussi à comprendre "mes" erreurs. (Problème dans "mon" fichier csv où les délimiteurs sont des ";" au lieu de virgules + ajout de "" inutiles (pb enregistrement excel sous csv) et dans le script ou certains paramètres étaient mal écrit comme "-organiZationalunit" (avec un Z comme dans biiiieZom).

    Je suis également une formation powershell et je dois reconnaître que les redirections de flux ne sont pas encore bien assimilées :p(seule apport favorable de ta part donc merci)

    Bonne journée.

    P.S.: c'est fou le temps que prennent certaines personnes pour écrire de la merde ! ^^



    mardi 30 mars 2021 11:29
  • bonjour MottoFabster,

    [...je ne vois pas pourquoi tu dis que c'est du dos...]

    Le ">>" c'est du DOS, pas du Powershell.

    [...(Problème dans "mon" fichier csv où les délimiteurs sont des ";"...]

    Tu peux résoudre cela facilement sans changer ton fichier .csv en ajoutant le paramètre -Delimiter ";" à la cmdlet Import-Csv.

    [... certains paramètres étaient mal écrit comme "-organiZationalunit" ...]

    Peu importe comment les champs sont appelés dans le fichier .csv si tu les utilises pour paramétrer les propriétés avec le même nom dans ton script.

    Cordialement

    Olivier

    mercredi 31 mars 2021 04:28
  • Bonjour Olivier,

    Merci pour ton retour.

    Le paramètre -delimiter est ce que j'ai choisis plutôt que de modifier tous les entrées de virgules.

    J'ai quand même dû enlever toutes les "" qui se sont ajoutées.

    Je suis des formations en ligne sur exchange et powershell en ce moment. Il est vrai que la pratique est la clé du succès.

    Merci pour ton soutien.

    Bonne continuation à toi.

    Cordialement.

    Fabrice

    mercredi 31 mars 2021 07:39
  • Bonjour Fabrice,

    Pour tes "" en trop, ou cela peut être également des blancs, il y a des méthodes qui s'appellent TRIM, TRIMSTART et TRIMEND. Je te fais une démo pour illustrer

    Get-Content C:\Temp\44056.csv # ici c'est un simple .csv # cependant, j'ai mis la grouille en ajoutant des blancs derrière toto <# et voila la sortie console Get-Content C:\Temp\44056.csv Just a simple demo file; titi ; toto

    #> # J'ai des espaces blancs derrière toto # je vais les supprimer avec un TRIM. Il y a aussi TRIMSTART et TRIMEND qui ne font que supprimer devant et derrière respectivement # et je n'oublie pas d'enregistrer mon .csv que j'ai désormais "préparé" (Get-Content C:\Temp\44056.csv).Trim("") | Out-File C:\Temp\44056.csv -Force # Nota : PS se moque que le fichier soit un .csv, .txt ... pour lui c'est juste lire un fichier et modifier le contenu


    voila, comment "nettoyer" rapidement un fichier.

    Happy Powershell.

    Cordialement

    Olivier

    P.S. désolé de t'avoir quelque peu bousculé, mauvaise humeur. Pour aider quelqu'un on a besoin de quelques info, qui bien souvent manquent, et ça fait chi.. Que veux-tu qu'on fasse avec "j'ai un pb". Dans ton cas, tu donnes plein d'info mais pas l'essentiel d'où mon "agacement".

    Tu aurais pu écrire, sans mettre tout le code :

    "J'importe un .csv, puis au sein d'un traitement foreach, lors de l'exécution de cette ligne New-MailBox ...j'ai ce message d'erreur. Je ne comprends pas ce qui se passe. La syntaxe de ta cmdlet est correcte, mais pourtant il ne trouve pas les valeurs de paramètres."

    Et aurait pu te répondre plus facilement, plusieurs causes possibles à cela, que tu as bien identifiées par toi-même (et c'est très bien) : ton .csv qui n'est pas bien importé à cause du délimiteur, les noms des entêtes de ton .csv qui ne correspondent pas aux valeurs passées en paramètre

    Nota : Ca aurait pu être également un .csv sans en-tête, on a déjà vu ça.

    Dans le futur, tu pourras rencontrer de nouveau ce soucis. Pour t'aider à diagnostiquer rapidement fais juste un Get-Content de ton fichier. Là, tu verras tout de suite le contenu, et ce qui ne va pas. C'est en forgeant qu'on devient forgeron, il parait :-)

    mercredi 31 mars 2021 11:43