Accueil > Active Directory, Microsoft, Scripts > Script – Créer des comptes utilisateurs Active Directory depuis un fichier CSV

Script – Créer des comptes utilisateurs Active Directory depuis un fichier CSV

vbscriptJ’ai découvert toute la puissance du Scripting lors d’un projet de migration Windows NT 4.0 vers Windows 2000 il y a bientôt 10 ans de cela. 

Eh bien 10 ans après, ces scripts fonctionnement toujours parfaitement.

 

En voici un que j’utilise assez souvent et qui permet de créer un ensemble de compte utilisateurs à partir d’un fichier CSV (que vous pouvez créer très simplement à partir d’Excel par exemple).

A partir des 2 colonnes du fichier (le prénom et le nom), le script crée des utilisateurs avec les attributs suivants :

  • Nom Affiché = Nom +  <espace> + Prénom
  • Login = 1ere_lettre (prénom) + “.” + Nom
  • UPN = Login + “@” + suffixe (défini dans le script)
  • Mot de passe = P@ssword

Bien entendu, tous ces éléments peuvent être modifiés au gré de vos besoins.

Recopiez le code qui suit dans un fichier texte. Renommer l’extension en .VBS et le tour est joué.

 

 

option explicit

dim LDAPConnectString
dim Connection, InputFileName, FSO, TextFile, Count, User, Line, Cols
dim SamAccountName, CN, FirstName, LastName, UserPrincipalName

on error resume next

Const SuffixeUPN = "@mydomain.lan"
Const CSVSeparator = ";"
LDAPConnectString = "LDAP://ou=import,dc=mydomain,dc=lan"
Set Connection = GetObject(LDAPConnectString)

InputFileName = "Users.csv"
Count = 0

set FSO = CreateObject("Scripting.FileSystemObject")
set textFile =  FSO.OpenTextFile(InputFileName,1)

Do until textFile.AtEndOfStream

  Line = textfile.ReadLine
  Cols = Split(Line, CSVSeparator)
  Count = Count + 1
  FirstName = Trim(cols(0)) ‘Prenom
  LastName = Trim(cols(1)) ‘Nom
  SamAccountName = Lcase(left(FirstName, 1) & "." & LastName)
  Set User = Connection.Create("User", "CN=" & LastName & " " & FirstName)
  User.Put "displayName", LastName & " " & FirstName
  User.Put "sAMAccountName", SamAccountName
  User.Put "givenName", FirstName
  User.Put "sn", LastName
  User.Put "UserPrincipalName", SamAccountName & suffixeUPN
  User.SetInfo
  User.AccountDisabled = false
  User.SetPassword("P@ssw0rd")
  User.SetInfo

Loop

wscript.echo "Opération Terminée. " & Count & " utilisateurs importés."   

textFile.close
set Connection = nothing
set FSO = nothing
set textFile = nothing

Publicités
Catégories :Active Directory, Microsoft, Scripts Étiquettes :
  1. zabuzakill
    31 octobre 2012 à 10:55

    Bonjour,

    J’e trouve ton script super, mais je souhaiterais faire une modification afin de mettre par défaut en mot de passe (nom+ le premier lettre du prénom) avec une option comme quoi lors de la première connexion l’utilisateur change de mot de passe.

    Pourriez-vous m’aider svp?

    • 31 octobre 2012 à 13:30

      Salut

      Pas de soucis pour le mot de passe. Remplace simplement la ligne User.SetPassword(« P@ssw0rd ») par User.SetPassword(Lastname + Left(FirstName,1))

      Pour forcer le changement de mot de passe à l’ouverture de session, il suffit d’ajouter la ligne suivante juste avant le User.SetInfo : User.Put « pwdLastSet », 0

      Je te conseille vivement d’aller faire un tour sur le site http://www.selfadsi.org. C’est réellement la référence en la matière.

      Bonne chance

      • Zabuzakill
        29 novembre 2012 à 13:48

        Bonjour Merci beaucoup pour ta réponse. Et désolé pour la mienne très en retard.

        Je vais abuser un peu mais, sur mon second serveur je souhaite rentrer plus de 500 users d’un cout avec un mot de passe et différents groupes. J’ai créé mon .csv avec 4 colonnes (1:nom, 2:Prénom, 3:mot de passe, 4:Ou)

        Dans
        Const SuffixeUPN = « @mydomain.lan »
        Const CSVSeparator = « ; »
        LDAPConnectString = « LDAP://ou=import,dc=mydomain,dc=lan »

        J’ai renseigné que l’Ou parent.

        Et je souhaite que mon vbs prenne les colonnes 3 et 4 pour attribuer le mot de passe défini à chaque users et les placent dans l’Ou également.

        voici mon script:

        option explicit

        dim LDAPConnectString
        dim Connection, InputFileName, FSO, TextFile, Count, User, Line, Cols
        dim SamAccountName, CN, FirstName, LastName, UserPrincipalName, Password

        on error resume next

        Const SuffixeUPN = « @labo.local »
        Const CSVSeparator = « ; »
        LDAPConnectString = « LDAP://ou=Utilisateurs,dc=labo,dc=local »
        Set Connection = GetObject(LDAPConnectString)

        InputFileName = « IDE-01-.csv »
        Count = 0

        set FSO = CreateObject(« Scripting.FileSystemObject »)
        set textFile = FSO.OpenTextFile(InputFileName,1)

        Do until textFile.AtEndOfStream

        Line = textfile.ReadLine
        Cols = Split(Line, CSVSeparator)
        Count = Count + 1
        LastName = Trim(cols(0))’Nom
        FirstName = Trim(cols(1))’Prenom
        Password = Trim(cols(2)) ‘Mot de passe
        Ou = Trim(cols(3))’ Ou

        SamAccountName = Lcase(LastName & Left(FirstName, 1))
        Set User = Connection.Create(« User », « CN= » & LastName &  »  » & FirstName)
        User.Put « displayName », LastName &  »  » & FirstName
        User.Put « sAMAccountName », SamAccountName
        User.Put « givenName », FirstName
        User.Put « sn », LastName
        User.Put « UserPrincipalName », SamAccountName & suffixeUPN
        User.SetInfo
        User.AccountDisabled = false
        User.Put « Pwd », Password

        Const UAC = 544 ‘ Changement de mot de passe à la première connexion
        User.SetInfo

        Loop

        wscript.echo « Opération Terminée.  » & Count &  » utilisateurs importés. »

        textFile.close
        set Connection = nothing
        set FSO = nothing
        set textFile = nothing

        Merci d’avance,

      • 29 novembre 2012 à 15:01

        Hello

        Tu souhaiterais mettre tes utilisateurs dans un groupe ou dans une OU particulière ?

  2. zabuzakill
    29 novembre 2012 à 16:52

    Je souhaite les mettres dans une ou specifier dans la colonne 4 du .Csv. Cette ou est a l interieur de l’ou Utilisateurs que j ai renseigne au debuy du script.

    Merci pour ton aide

    • 1 décembre 2012 à 13:56

      Dans ce cas, tu devras initialiser l’objet « connection » dans la boucle « Do until.. » et non plus en dehors. Le champ correspondant à l’OU devra respecter un format de type « ou=ou1,ou2,dc=labo,dc=local ».

      do until…

      Set Connection = GetObject(« LDAP:// » & ou)
      Set User = Connection.Create(« User », « CN= » & LastName & » » & FirstName)

  1. No trackbacks yet.

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s

%d blogueurs aiment cette page :