将用户从 CSV/Excel 导入 Active Directory

Posted

技术标签:

【中文标题】将用户从 CSV/Excel 导入 Active Directory【英文标题】:Import users into Active Directory from CSV/Excel 【发布时间】:2011-10-06 15:39:10 【问题描述】:

如何将一组用户导入 Active Directory 组织单位(我的用户唯一有权访问的单位)。我希望能够从 CSV 或 Excel 文件中导入用户和密码,并将帐户和密码设置为不过期。

可以吗?

【问题讨论】:

【参考方案1】:

如果您可以使用 PowerShell,这里是脚本的开头:

# Imput of the password 
$defMDP = Read-Host "Entrez le mot de passe par défaut : " #-asSecureString
$utilisateurs = Import-csv c:\pgdvlp\MesUtilisateurs.csv

foreach ($utilisateur in $utilisateurs)

  # Create an AD connexion
  $urlLDAP = "LDAP://"+ $utilisateur.silLDAPA + "/" + $utilisateur.silOU + "," + $utilisateur.silLDAPB
  $objOUCreation = [ADSI] $urlLDAP

  # Create the user object
  $strUtilisateur = $utilisateur.silPrenom + " " + $utilisateur.silNom
  $objUtilisateur = $objOUCreation.create("inetOrgPerson", "cn=" + $strUtilisateur)
  $objUtilisateur.SetInfo()

  # Put the account parameters
  $strLogin = $utilisateur.silPrenom[0] + $utilisateur.silNom
  $objUtilisateur.samaccountname = $strLogin
  $objUtilisateur.givenName = $utilisateur.silPrenom
  $objUtilisateur.sn = $utilisateur.silNom
  $objUtilisateur.displayName = $utilisateur.silPrenom + " " + $utilisateur.silNom
  $objUtilisateur.userPrincipalName = $strLogin + "@" + $utilisateur.silDomaine
  $objUtilisateur.company = $utilisateur.silSociete
  $objUtilisateur.department = $utilisateur.silDepartment
  $objUtilisateur.title = $utilisateur.silTitre
  $objUtilisateur.mail = $utilisateur.silAddresseMail
  $objUtilisateur.telephoneNumber = $utilisateur.silNumTel

  # put the de password
  $objUtilisateur.SetPassword($defMDP)
  $objUtilisateur.pwdLastSet = 0

  # put the account state
  $objUtilisateur.userAccountControl = $utilisateur.silEtatCompte

  # write the datas
  $objUtilisateur.SetInfo()

这是 VBScript 中的一些内容(对不起,法语中的 vars 名称):

'==========================================================================
'
' NAME: CREATEUSER.VBS
'
' AUTHOR: JPB , Silogix
' DATE  : 29/06/2009
'
' COMMENT: 
'
'==========================================================================
Option Explicit
On Error Resume Next

'==========================================================================
' User creation
'==========================================================================
Const UF_NORMAL_ACCOUNT = 512 '0x0200
Function createUser(ou, nom, prenom, telephone, domaine)
  On Error Resume Next
  Dim L1 ' Première lettre du prénom
  Dim Login ' Identifiant de connexion
  Dim EMail ' Adresse de courrier
  Dim commonName
  Dim Password
  Dim newUser
  Dim mail
  Dim strwhereToCreate
  Dim ouWhereToCreate

  commonName = "CN=" & prenom & " " & nom
  Password = "test.2011"
  L1 = Mid(prenom, 1, 1)
  Login = L1&"."&nom
  mail = Login & "@" & domaine  
  Err.Clear
  set newUser = ou.Create ("user", commonName)
  newUser.put "userPrincipalName", mail
  newUser.put "samAccountName", Login
  newUser.SetInfo
  If (Err.number <> 0) Then
    createUser = Err.number 
    Exit function
  End If

  newUser.put "userAccountControl", UF_NORMAL_ACCOUNT
  newUser.put "telephoneNumber", telephone
  newUser.SetPassword Password
  newUser.SetInfo

  createUser = 0

End Function

'==========================================================================
' Test of command line arguments
'==========================================================================
If WScript.Arguments.Count <> 1 Then
  WScript.Echo "Attention : Il faut au moins un paramètre"
  WScript.Echo "Exemple : CreateUser.vbs c:\temp\users.csv"
  WScript.Quit(1)
End If

Dim machine
Dim oRootDSE ' Root Directory Service Specific Entry
Dim ofso ' Acces to file system
Dim oUsersFile ' The user file
Dim oADSI ' Acces to ADSI
Dim strwhereToCreate ' Target OU string
Dim ouWhereToCreate ' Target OU object

set ofso = CreateObject("Scripting.FileSystemObject")
' Does file exists
If ofso.FileExists(WScript.Arguments(0)) = False Then
  WScript.Echo Err.Description & " : " &  WScript.Arguments(0)
  WScript.Quit(2)  
End If

' AD Connexion
machine = "192.168.183.138"
Set oRootDSE = GetObject("LDAP://" & machine & "/RootDSE")
strwhereToCreate = "ou=OU," & oRootDSE.get("defaultNamingContext")
Set oADSI = GetObject("LDAP:")
Set ouWhereToCreate = oADSI.openDsObject("LDAP://" & machine & "/"&strwhereToCreate, "societe\administrateur", "test.2011", 1)

Set oUsersFile = ofso.OpenTextFile(WScript.Arguments(0))
Do While Not oUsersFile.AtEndOfStream
  Dim arrArgUser
  Dim strLine 

  strLine = oUsersFile.ReadLine
  arrArgUser = split(strLine,";")
  If arrArgUser(0) <> "Prenom" Then
    Dim Rc
    Rc = 0
    Rc = createUser(ouWhereToCreate, arrArgUser(1), arrArgUser(0), arrArgUser(4), "societe.fr")  
    If Rc <> 0 Then
      WScript.Echo "Impossible de Créér " & arrArgUser(0) & " " & arrArgUser(1) & " erreur " & Rc
    End If
  End If

Loop

【讨论】:

以上是关于将用户从 CSV/Excel 导入 Active Directory的主要内容,如果未能解决你的问题,请参考以下文章

如何将Active Directory ldif文件导入openldap服务器?

如何将数据从单个 csv/excel 文件传输到多个 oracle 表

Laravel Excel - 导入日期验证

导入 csv excel 文件时,Laravel 7 时间戳迁移始终返回 0000-00-00 00:00:00

pandas 导入导出

从注册表单将用户注册到 Microsoft Active Directory