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 :

Import utilisateur Active Directory avec Powershell New-ADUser [PowerShell]


Sujet :

Scripts/Batch

  1. #1
    Futur Membre du Club
    Inscrit en
    Juin 2008
    Messages
    145
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 145
    Points : 6
    Points
    6
    Par défaut Import utilisateur Active Directory avec Powershell New-ADUser
    Bonjour à tous,

    J'ai un script powershell ainsi qu'un fichier excel (csv) avec tout mes utilisateurs. Dans ce fichier CSV j'ai :

    Lastname;Firstname;SAMAccountName;Etablissement;OU;Group;Description

    et voici mon script powershell :

    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    Import-Module ActiveDirectory
    Import-Module 'Microsoft.PowerShell.Security'
    
    $users = Import-Csv -Delimiter ";" -Path "C:\users.csv"
    
    foreach ($temp in $users){
        $name = $temp.Firstname + " " + $temp.Lastname
        $fname = $temp.Firstname
        $lname = $temp.Lastname
        $SAM = $temp.SAMAccountName
        $upn = $temp.SAMAccountName + "@ng.local"
    	$mail = $temp.SAMAccountName + "@normandie-generation.fr"
        $ou = $temp.OU
        $grp = $temp.Group
    	$descr = $temp.Description
        $site = $temp.Etablissement
    	
        try{
    		
    		New-ADUser -Name $name -SamAccountName $SAM -UserPrincipalName $upn -DisplayName $name -givenname $fname -surname $lname -Description $descr -title $descr -office $site -EmailAddress $mail -Path $ou -AccountPassWord (ConvertTo-SecureString "Azerty61" -AsPlaintext -Force) -Enabled $true
            echo "Utilisateur ajouté : $name"
            Add-ADGroupMember -Identity $grp -Member $SAM
    	}
    	
    	catch{
    	echo "Utilisateur non ajouté : $name"
    	}
       }
    Mon script fonctionne bien. Les utilisateurs sont bien créés, je souhaite que cela soit parfait et ma ligne "Add-ADGroupMember -Identity $grp -Member $SAM" me pose un souci.

    Cette ligne fonction également. En fait dans mon fichier excel j'ai créer une formule avec des SI qui indique que en fonction de la description (exemple : Comptable, son groupe sera GRP_COMPTABILITE)

    L'erreur que j'ai c'est que dans les résultats de la console powershell ça m'indique que l'utilisateur a été ajouté et ensuite qu'il ne l'a pas été :

    Utilisateur ajouté : Doe John
    Utilisateur non ajouté : Doe John

    PS C:\Users\Administrateur>

    Savez-vous où je peux placer la ligne "Add-ADGroupMember -Identity $grp -Member $SAM" afin de ne pas avoir cette erreur ? Je continue mes tests, à savoir après mon catch de faire une requête du style "Si mon utilisateur ($SAM) exist alors Add-ADGroupMember -Identity $grp -Member $SAM et echo l'utilisateur à bien été ajouté dans le $grp sinon echo l'utilisateur n'a été ajouté dans aucun groupe.

    En vous remerciant

  2. #2
    Membre confirmé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2012
    Messages
    281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2012
    Messages : 281
    Points : 520
    Points
    520
    Par défaut
    salut hunyka

    alors ton erreur est dans le Add-ADGroupMember tu l'a compris

    une première chose que tu peut faire c'est
    soit géré les numero de ligne dans catch
    soit faire un deuxieme try/catch pour Add-ADGroupMember

    après peut tu exécuté le Add-ADGroupMember seul pour avoir l'erreur qui est généré

  3. #3
    Futur Membre du Club
    Inscrit en
    Juin 2008
    Messages
    145
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 145
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par 6ratgus Voir le message
    salut hunyka

    alors ton erreur est dans le Add-ADGroupMember tu l'a compris

    une première chose que tu peut faire c'est
    soit géré les numero de ligne dans catch
    soit faire un deuxieme try/catch pour Add-ADGroupMember

    après peut tu exécuté le Add-ADGroupMember seul pour avoir l'erreur qui est généré
    Salut 6ratgus

    En fait, je ne suis pas développeur, c'est tout nouveau pour moi le PowerShell. J'ai des connaissances en ligne de commande linux, CSS, HTML mais ça s'arrête là. Je n'ai pas encore acquis la logique de base des langages de programmation. Try/Catch je vois ce que c'est. Par contre géré les numéro de ligne je ne sais pas du tout.

    J'ai modifié mon script, j'ai encore 1 ou 2 choses à revoir (vraiment du détail) mais mon script fonctionne et je n'ai plus d'erreur dans le Powershell.

    Voici mon code :

    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    Import-Module ActiveDirectory
    Import-Module 'Microsoft.PowerShell.Security'
    
    $users = Import-Csv -Delimiter ";" -Path "C:\users.csv"
    
    foreach ($temp in $users){
        $name = $temp.Firstname + " " + $temp.Lastname
        $fname = $temp.Firstname
        $lname = $temp.Lastname
        $SAM = $temp.SAMAccountName
        $upn = $temp.SAMAccountName + "@ng.local"
        $mail = $temp.SAMAccountName + "@normandie-generation.fr"
        $ou = $temp.OU
        $grp = $temp.Group
        $descr = $temp.Description
        $site = $temp.Etablissement
    	
        try{
    		
    		New-ADUser -Name $name -SamAccountName $SAM -UserPrincipalName $upn -DisplayName $name -givenname $fname -surname $lname -Description $descr -title $descr -office $site -EmailAddress $mail -Path $ou -AccountPassWord (ConvertTo-SecureString "Azerty61" -AsPlaintext -Force) -Enabled $true
            echo "Utilisateur ajouté : $name"
    
    	}
    	
    	catch{
    	echo "Utilisateur non ajouté : $name"
    	}
    }
    
    $Items = Import-Csv -Delimiter ";" -Path "C:\users.csv"
    $Items | ForEach-Object {
            
        $SamAccountName = $_.SAMAccountName
        $Groups = ($_.Group).split(",")
    
    foreach ($Group in $Groups) {
    
    try {
    
        "Adding $SamAccountName to the following group: $Group"
        Add-ADGroupMember -Identity $Group $SAMAccountName
    }
    
    catch {
    echo "L'utilisateur n'a pas été ajouter dans un group : $name"
     }      
     }      
    }
    Pour être toute à fait je comprend le début de mon script mais mon 2ème try, je ne saisi pas tout. Comme le $_ / $Items | ForEach-Object { / et foreach ($Group in $Groups) {


    Pour finir mon erreur, ou plutôt ce qui me gêne, c'est que ça reprendre la description quand un utilisateur n'a pas de groupe. Pour rappel mon fichier CSV à pour colonne :

    Lastname;Firstname;SAMAccountName;Etablissement;OU;Group;Description

    Quand le script passe sur un utilisateur sans groupe (Group) il me renvoi comme réponse :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    
    L'utilisateur n'a pas été ajouter dans un group :j.doe
    Adding t.martin to the following group: TECHNICIEN SUPÉRIEUR COMPTABLE
    L'utilisateur n'a pas été ajouter dans un group : j.doe
    Adding j.doe to the following group: TECHNICIEN SUPÉRIEUR COMPTABLE
    L'utilisateur n'a pas été ajouter dans un group : j.doe
    Je m'aperçois donc que j.doe revient plusieurs fois, il y a une boucle faite sur l'utilisateur et au lieu de me donner le nom du groupe et me sort ce qui est indiqué dans la colonne description.

    Si une personne peux m'expliquer je prend volontier.

    Sinon merci 6ratgus pour ton intervention

    Bonne fête de fin d'année

  4. #4
    Membre confirmé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2012
    Messages
    281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2012
    Messages : 281
    Points : 520
    Points
    520
    Par défaut
    alors beaucoup de questions !!! je commence par la fin
    Je m'aperçois donc que j.doe revient plusieurs fois, il y a une boucle faite sur l'utilisateur et au lieu de me donner le nom du groupe et me sort ce qui est indiqué dans la colonne description.
    il y peut être un problème dans le fichier CSV, des virgules a la place des points virgules ou l'inverse sur certaine ligne
    à vérifier mais coté script ça a l'air bon
    si tu a plusieurs fois j.doe c'est sans doute qu'il a plusieurs groupe

    Quand le script passe sur un utilisateur sans groupe (Group) il me renvoi comme réponse :
    je t'ai modifier le script à la fin de ce message pour géré ce genre de problème

    je n'ai plus d'erreur dans le Powershell
    normal les try catch empêche l'affichage du message d'erreur !!!
    pour la première écriture d'un script il vaut mieux enlevé les try/catch pour bien voir les erreurs

    je ne saisi pas tout. Comme le $_ / $Items | ForEach-Object { / et foreach ($Group in $Groups) {
    je ne sais pas tous moi non plus mais je te donne quelques infos il existe des tutos sur internet sinon Laurent Dardenne de ce forum en a fait plein :
    pour le $_ c'est une variable contenant les objets dans le pipeline
    le pipeline "|" transmet un à un les objets de la variable de gauche a l'instruction à droite du pipeline
    ForEach égale ForEach-Object

    j'ai oublié quelques chose ?

    J'ai modifié mon script, j'ai encore 1 ou 2 choses à revoir (vraiment du détail)
    moi aussi
    j'ai fait qu'une boucle pour géré le fichier CSV en autre
    affiché le message d'erreur dans les catch
    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    Import-Module ActiveDirectory
    Import-Module 'Microsoft.PowerShell.Security'
     
    $users = Import-Csv -Delimiter ";" -Path "C:\users.csv"
     
    foreach ($temp in $users) {
        $name = $temp.Firstname + " " + $temp.Lastname
        $fname = $temp.Firstname
        $lname = $temp.Lastname
        $SAM = $temp.SAMAccountName
        $upn = $temp.SAMAccountName + "@ng.local"
        $mail = $temp.SAMAccountName + "@normandie-generation.fr"
        $ou = $temp.OU
        $grp = $temp.Group
        $descr = $temp.Description
        $site = $temp.Etablissement
     
        try {
    		New-ADUser -Name $name -SamAccountName $SAM -UserPrincipalName $upn -DisplayName $name -givenname $fname -surname $lname -Description $descr -title $descr -office $site -EmailAddress $mail -Path $ou -AccountPassWord (ConvertTo-SecureString "Azerty61" -AsPlaintext -Force) -Enabled $true
            write-host "Utilisateur ajouté : $name"
            }
    	catch {
    	    write-host "Utilisateur non ajouté : $name"
    	    }
     
        $SamAccountName = $temp.SAMAccountName
        $Groups = ($temp.Group).split(",")
     
        $Groups | where {$_ -ne "" -and $_ -ne $null} | foreach {
            $group = $_
            try {
                write-host "Adding $SamAccountName to the following group: $_"
                Add-ADGroupMember -Identity $_ $SAMAccountName
                }
     
            catch {
                write-host "$($_.Exception.Message)" -ForegroundColor Red
                write-host "L'utilisateur $fname $lname n'a pas pu etre ajouter dans le group : $group"
                }      
            }      
     
        }

  5. #5
    Futur Membre du Club
    Inscrit en
    Juin 2008
    Messages
    145
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 145
    Points : 6
    Points
    6
    Par défaut
    Bonjour,

    Je te répond avec du retard. Je te remercie pour l'aide apporté. Le script fonctionne.

    Encore merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 03/05/2014, 18h49
  2. [WS 2003] Impossible de lancer un programme avec un utilisateur Active Directory
    Par tom741 dans le forum Windows Serveur
    Réponses: 3
    Dernier message: 17/12/2010, 11h24
  3. Active directory avec ASP
    Par vva dans le forum ASP
    Réponses: 13
    Dernier message: 29/08/2008, 11h02
  4. Réponses: 15
    Dernier message: 22/03/2007, 16h48
  5. Compte utilisateur Active Directory
    Par dim971 dans le forum C#
    Réponses: 9
    Dernier message: 11/02/2007, 19h37

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