none
Script de création de contacts de messagerie RRS feed

  • Question

  • Bonjour,

    (Petit message pour ceux comme moi qui apprennent 2007 et qui découvre le powershell)

    Je vous conseille le téléchargement de l'outil freeware: http://www.powergui.org/entry.jspa?externalID=1983&categoryID=299
    -->quand vous tapez votre code, les fonctions doivent être en bleue ou vert pour être valides.

    Script de création de contacts de messagerie très simple au format csv (fichier dont les valeurs sont séparées par un commutateur type virgule)

    1.Ouvrez un notepad.exe-->nouveau fichier
    2.dedans tapez les champs souhaités (ex: Name,DisplayName,ExternalEmailAddress,OrganizationalUnit) et les valeurs associées en dessous. Votre fichier se présente donc tel que:

    Name,DisplayName,ExternalEmailAddress,OrganizationalUnit
    Paul Lor,Plor,Plor@sylis.com,contacts
    Lila Oil,loil,loil@sylis.com,contacts
    kim Pol,kpol,kpol@sylis.com,contacts

    3.sauvegardez le fichier en contacts.csv

    4.ensuite écrivez votre script de création de contact avec les cmdlet powershell dans un notepad:

    # Script de création de contacts via un fichier csv
    # $contact est suivi des champs du csv (Name,mail,OU)
    $contacts=Import-CSV "c:\Contacts.csv"

    ForEach ($contact in $contacts)
    {
     New-MailContact –Name $contact.Name –DisplayName $contact.DisplayName –ExternalEmailAddress $contact.ExternalEmailAddress –OrganizationalUnit $Contact.OrganizationalUnit


    Enregistrez le en contact.ps1

    Attention d'avoir créé au préalable les OU correspondantes (dans l'exemple l'OU contacts

    5.Ouvrez le powershell et lancez la commande: .\contact.ps1 (avoir copié le csv et le Ps1 au même endroit biensur)

    Ce script ne fait aucun rapport d'erreurs ni aucune confirmation dans des fichiers de log, les erreurs seront répertoriées directement sous powershell.Mais il fonctionne.

    Cordialement,

     

    • Modifié GCha mercredi 28 octobre 2009 15:41 lisibilité
    mardi 27 octobre 2009 16:23

Réponses

  • Même script mais avec rapport d'erreur et pourcentage d'avancement:


    # Script de création de contacts via un fichier csv
    # $contact est suivi des champs du csv (Name,mail,OU)

    $CSVUPath="C:\Contacts.csv"
    $contacts=Import-CSV "c:\Contacts.csv"

    if (!$contacts)
    {
     Write-Host -fore Cyan “`nFailed to read the input file. It is either invalid
    or improperly formatted.`n”
    exit
    }
    # Initialize log file
    $datetime = Get-Date
    $logHeader = “
    *******************************************************************
    Run time = $dateTime using input file $CSVUPath
    *******************************************************************”
    $logFile = “C:\newContacts.log”
    Out-File $logFile -InputObject $logHeader -Append
    # Set variables used to write to the log file
    $err = $null
    $blankLine = “----------------------------------------------------------”
    $total = 0
    $errorTotal = 0

    ForEach ($contact in $contacts)
    {
     New-MailContact –Name $contact.Name `
     -FirstName $contact.FirstName `
     -LastName $contact.LastName `
     –displayname $contact.DisplayName `
     –ExternalEmailAddress $contact.ExternalEmailAddress `
     –OrganizationalUnit $Contact.OrganizationalUnit `
     -ErrorVariable err | out-null
     
     If ($err -ne $null)
     {
     $errorString = “[ERROR]: Processing user $($contact.name) failed with the
     following error:”
     Out-File $logfile -Append -Inputobject $blankLine, `
     $errorString, $err[0], $blankLine
     $errorTotal += 1
     }
     else
     {
     $outString = “[SUCCESS]: New contact created for $($contact.name)"
     Out-File $logFile -Inputobject $outString -append
     }
     $total += 1
     write-progress -Activity “Processed User: $($contact.name)” -Status “Progress:” `
     -PercentComplete ($total/$contacts.count*100)
    }
    # output the summary
    Write-Host -Fore yellow “`nProcessing complete. $total users were processed with
    $errorTotal errors. Please refer to $logfile for more details.`n”

    Le fichier CSV est de la forme suivante:

    L1: CHAMPS: FirstName,LastName,Name,DisplayName,ExternalEmailAddress,OrganizationalUnit

                Julie,Lang,Julie Lang,jlang,jlanglben@sylis.com,contacts
                Ben,sert,Ben sert,bsert,bsert@sylis.com,contacts

    mercredi 28 octobre 2009 15:31

Toutes les réponses

  • Même script mais avec rapport d'erreur et pourcentage d'avancement:


    # Script de création de contacts via un fichier csv
    # $contact est suivi des champs du csv (Name,mail,OU)

    $CSVUPath="C:\Contacts.csv"
    $contacts=Import-CSV "c:\Contacts.csv"

    if (!$contacts)
    {
     Write-Host -fore Cyan “`nFailed to read the input file. It is either invalid
    or improperly formatted.`n”
    exit
    }
    # Initialize log file
    $datetime = Get-Date
    $logHeader = “
    *******************************************************************
    Run time = $dateTime using input file $CSVUPath
    *******************************************************************”
    $logFile = “C:\newContacts.log”
    Out-File $logFile -InputObject $logHeader -Append
    # Set variables used to write to the log file
    $err = $null
    $blankLine = “----------------------------------------------------------”
    $total = 0
    $errorTotal = 0

    ForEach ($contact in $contacts)
    {
     New-MailContact –Name $contact.Name `
     -FirstName $contact.FirstName `
     -LastName $contact.LastName `
     –displayname $contact.DisplayName `
     –ExternalEmailAddress $contact.ExternalEmailAddress `
     –OrganizationalUnit $Contact.OrganizationalUnit `
     -ErrorVariable err | out-null
     
     If ($err -ne $null)
     {
     $errorString = “[ERROR]: Processing user $($contact.name) failed with the
     following error:”
     Out-File $logfile -Append -Inputobject $blankLine, `
     $errorString, $err[0], $blankLine
     $errorTotal += 1
     }
     else
     {
     $outString = “[SUCCESS]: New contact created for $($contact.name)"
     Out-File $logFile -Inputobject $outString -append
     }
     $total += 1
     write-progress -Activity “Processed User: $($contact.name)” -Status “Progress:” `
     -PercentComplete ($total/$contacts.count*100)
    }
    # output the summary
    Write-Host -Fore yellow “`nProcessing complete. $total users were processed with
    $errorTotal errors. Please refer to $logfile for more details.`n”

    Le fichier CSV est de la forme suivante:

    L1: CHAMPS: FirstName,LastName,Name,DisplayName,ExternalEmailAddress,OrganizationalUnit

                Julie,Lang,Julie Lang,jlang,jlanglben@sylis.com,contacts
                Ben,sert,Ben sert,bsert,bsert@sylis.com,contacts

    mercredi 28 octobre 2009 15:31
  • "Script de création d'utilisateur de messagerie: cmdlet Enable-MailUser

    # Script de création de mailusers utilisateurs via un fichier csv
    # $mailuser est suivi des champs du csv (Identity,DisplayName,ExternalEmailAddress)
    # Nécessite que les comptes AD soient déja créés

    $CSVUPath="C:\MailUsers.csv"
    $mailusers=Import-CSV $CSVUPath

    if (!$mailusers)
    {
     Write-Host -fore Cyan “`nFailed to read the input file. It is either invalid
    or improperly formatted.`n”
    exit
    }
    # Initialize log file
    $datetime = Get-Date
    $logHeader = “
    *******************************************************************
    Run time = $dateTime using input file $CSVUPath
    *******************************************************************”
    $logFile = “C:\newmailusers.log”
    Out-File $logFile -InputObject $logHeader -Append
    # Set variables used to write to the log file
    $err = $null
    $blankLine = “----------------------------------------------------------”
    $total = 0
    $errorTotal = 0

    ForEach ($mailuser in $mailusers)
    {
     Enable-MailUser –identity $mailuser.Identity `
     –displayname $mailuser.DisplayName `
     –ExternalEmailAddress $mailuser.ExternalEmailAddress `
     -ErrorVariable err | out-null
     
     If ($err -ne $null)
     {
     $errorString = “[ERROR]: Processing user $($mailuser.displayName) failed with the
     following error:”
     Out-File $logfile -Append -Inputobject $blankLine, `
     $errorString, $err[0], $blankLine
     $errorTotal += 1
     }
     else
     {
     $outString = “[SUCCESS]: New mailuser created for $($mailuser.name)"
     Out-File $logFile -Inputobject $outString -append
     }
     $total += 1
     write-progress -Activity “Processed User: $($mailuser.name)” -Status “Progress:” `
     -PercentComplete ($total/$mailusers.count*100)
    }
    # output the summary
    Write-Host -Fore yellow “`nProcessing complete. $total users were processed with
    $errorTotal errors. Please refer to $logfile for more details.`n”

    fichier CSV de la forme:

    CHAMPS: Identity,DisplayName,ExternalEmailAddress    (Identity correspond au nom affiché,displayname)
                  Fred Astair,Fred Astair,fastair@orange.com
                  Jeanie Longo,Jeanie Longo,jlongo@orange.com"

    mercredi 28 octobre 2009 15:39
  • Merci à tous pour vos contribution très utile :)

    Cependant concernant le premier script GCha, où ces contacts seront visible dans OWA, est-il possible d'avoir un screen ?

    Pour le fond de ma requête je cherche à creer des contacts type "locaux" à des utilisateurs dont j'ai restreint l'accés à la global adresslist via l'attribut MsgExchQueryBaseDN cependant il n'est pas possible de placer 2 Gal dans cet attribut par exemple :

    CN=NoGal,CN=All Global Address Lists,CN=Address Lists Container,CN=MYDOMAINE,CN=Microsoft Exchange,CN=Services,CN=Configuration,DC=universe,DC=local  && CN=GalPROF,CN=All Global Address Lists,CN=Address Lists Container,CN=universe,CN=Microsoft Exchange,CN=Services,CN=Configuration,DC=universe,DC=local

    J'espere ne pas être trop brouillon dans ma requete mais je suis débutant en exchange & powershell :)

    Merci d'avance.

    Minifab
    mardi 3 novembre 2009 08:51
  • Bonjour,

    Concernant ta question, les contacts que tu créés sont vus dans la liste d'adresse globale, sous owa également.

    Concernant ton 2ème point, tu ne peux avoir qu'une liste d'adresse globale. tu dois par contre pouvoir créer des listes d'adresses restreintes à certains utilisateurs.

    cordialement,
    mardi 3 novembre 2009 16:15
  • Bonsoir Gcha,

    Et merci pour ta réponse.
    - J'ai trouvé la solution en partageant des contacts directement via outlook dans les dossiers publics.
    - En fait j'ai restreint le carnet d'adresse global à certains utilisateurs afin qu'ils ne puissent pas voir les autres membres de l'entreprise.
    (Howto : http://www.exchange-genie.com/2007/10/hidding-global-address-lists-gal-with-exchange-2007/)

    J'ai une autre question mais je pense que je vais créer un nouveau sujet demain :)

    Bonne soirée à toi et merci encore.

    Minifab


    lundi 9 novembre 2009 17:19