none
Intégration en masse d'images pour des utilisateurs AD RRS feed

  • Question

  • Bonjour à toutes et tous,

    Je souhaite ajouter à plusieurs utilisateurs AD une image de contact afin que celle-ci apparaisse dans la GAL.

    Je sais en ajouter une au coup par coup via la commande :

    Import-RecipientDataProperty -Identity "nom_utilisateur" -Picture -FileData ([Byte[]]$(Get-Content -Path "chemin_UNC_photo" -Encoding Byte -ReadCount 0))
     
    Update-OfflineAddressBook "Carnet d'adresses en mode hors connexion"

    Je souhaite "pipeliner" la première commande afin qu'elle agisse sur toutes les BALs d'une OU.

    Voilà où j'en suis rendu :

    Get-Mailbox -OrganizationalUnit "mon_OU" | ForEach {Import-RecipientDataProperty -Identity $_.Name -Picture -FileData ([Byte[]]$Get-Content -Path ...........

    Et c'est la manière dont je dois gérer ce qu'il y aura dans le Path que je ne trouve pas.

    Pour chaque utilisateur, le chemin UNC de l'image est de la forme " \\Serveur\Image\prenom.nom.jpg", sachant que les comptes utilisateurs sont de la forme "premon.nom". Je voudrais donc faire une sorte de concaténation dans le Path du type "\\Serveur\Image\" + $_.Name + ".jpg".

    J'ai trouvé la cmdlet Join-Path, mais je ne sais pas si elle convient, et le cas échéant quelle est la bonne synthaxe pour lui passer les paramètres.

    Auriez-vous une idée ?

    D'avance merci.


    FXE





    • Modifié FXE jeudi 4 octobre 2012 15:11
    jeudi 4 octobre 2012 15:05

Réponses

  • Bonjour,

    un petit script pour résoudre les problèmes :)

    le fichier script.ps1 on met

    $mbx = Get-Mailbox "votrefiltre"
    foreach ($user in $mbx) {
    $path = '\\serveur\image\'+$user.alias+'.jpg'
    Import-RecipientDataProperty -Identity $user.name -Picture -FileData ([Byte[]]$(Get-Content -Path $path -Encoding Byte -ReadCount 0))
    }

    On sauvegarde

    Dans le Shell on fait

    Set-ExecutionPolicy RemoteSigned

    et on exécute le scripte 

    ./script.ps1

    ATTENTION :

    Le script prend X Mailbox en fonction de ce qui est mis dans le Get-Mailbox, il part ensuite dans une boucle qui sera exécutée autant de fois qu'il y a de mailbox a traiter.

    Il crée le Path avec l'attribut alias (choisir le bon attribut pour avoir le prenom.nom en fonction de votre configuration)

    et il fait l'import sur l'attribut name de mailbox et le path crée au dessus.

    Cordialement,

    Anthony COSTESEQUE


    • Modifié Anthony Costeseque jeudi 4 octobre 2012 19:48 typo
    • Marqué comme réponse FXE vendredi 5 octobre 2012 10:31
    jeudi 4 octobre 2012 19:46

Toutes les réponses

  • L'argument Path de Get-Content accepte les pipelines, vous pouvez donc construire un argument Path dans votre pipeline, si la commande voit un attribut du nom d'un argument, il sera utilisé. Il faut aussi savoir qu'un ForEach "casse" un pipeline et est en général plus lent

    voudrais donc faire une sorte de concaténation dans le Path du type "\\Serveur\Image\" + $_.Name + ".jpg".

    C'est tout à fait possible de construire une chaine de cette façon, vous aurez parfois besoin de l'inclure dans un bloc ( ) pour éviter des erreurs de typage.

    Pouvez-vous essayer la commande suivante (en ajustant le filtre et la construction du chemin) ?

    Get-Mailbox "votrefiltre" | select Identity,@{name="Path";expression={'\\serveur\image\'+$_.alias+'.jpg'}} | Import-RecipientDataProperty -Picture -FileData ([Byte[]]$(Get-Content -Encoding Byte -ReadCount 0))



    jeudi 4 octobre 2012 15:29
    Modérateur

  • Bonjour Bruce et merci pour votre réponse.

    Lorsque je lance cette commande adaptée à mes besoin, EMS m'affiche le prompt suivant : "Path[0]:" et attend que je lui fournisse une valeur.

    Je ne pense pas que ce soit le comportement attendu. Ne manquerait-il pas l'appel de la variable dans la commande :

    Get-Mailbox "votrefiltre" | select Identity,@{name="Path";expression={'\\serveur\image\'+$_.alias+'.jpg'}} | Import-RecipientDataProperty -Picture -FileData ([Byte[]]$(Get-Content -Path Path -Encoding Byte -ReadCount 0))

    FXE

    jeudi 4 octobre 2012 15:58
  • Je viens de tester, mais j'obtiens le retour suivant :

    Get-Content : Impossible de trouver le chemin d'accès « C:\Windows\system32\Path », car il n'existe pas.


    FXE

    jeudi 4 octobre 2012 16:03
  • Bonjour,

    un petit script pour résoudre les problèmes :)

    le fichier script.ps1 on met

    $mbx = Get-Mailbox "votrefiltre"
    foreach ($user in $mbx) {
    $path = '\\serveur\image\'+$user.alias+'.jpg'
    Import-RecipientDataProperty -Identity $user.name -Picture -FileData ([Byte[]]$(Get-Content -Path $path -Encoding Byte -ReadCount 0))
    }

    On sauvegarde

    Dans le Shell on fait

    Set-ExecutionPolicy RemoteSigned

    et on exécute le scripte 

    ./script.ps1

    ATTENTION :

    Le script prend X Mailbox en fonction de ce qui est mis dans le Get-Mailbox, il part ensuite dans une boucle qui sera exécutée autant de fois qu'il y a de mailbox a traiter.

    Il crée le Path avec l'attribut alias (choisir le bon attribut pour avoir le prenom.nom en fonction de votre configuration)

    et il fait l'import sur l'attribut name de mailbox et le path crée au dessus.

    Cordialement,

    Anthony COSTESEQUE


    • Modifié Anthony Costeseque jeudi 4 octobre 2012 19:48 typo
    • Marqué comme réponse FXE vendredi 5 octobre 2012 10:31
    jeudi 4 octobre 2012 19:46
  • Bonjour Athony,

    Merci pour votre réponse. C'est parfait ! Ca fonctionne à merveille !

    Encore merci et bonne continuation !


    FXE

    vendredi 5 octobre 2012 10:31