Search code examples
powershellactive-directorywindows-server-2016powershell-ise

Mass add users AD with Powershell


Import-Module ActiveDirectory
$file = "C:\Users\Administrator\Documents\UsersHR.csv"
$targetDN = "OU=HR,OU=NTTLab,DC=NTTLab,DC=internal"

$importedUsers = Import-Csv $file
foreach ($user in $importedUsers)
{
    $Username   = $User.Username
    $Password   = $User.Password
    $Firstname  = $User.Firstname
    $Lastname   = $User.Surname
    $Name       = $User.Firstname + $User.Lastname
    $OU         = "OU=HR,OU=NTTLab,DC=NTTLab,DC=internal" 
    $company    = $User.company
    $department = $User.department
    $Password = $User.Password

New-ADUser -SamAccountName $Username -Name $Name -GivenName $Firstname -Surname $Lastname -Enabled $true -DisplayName "$Lastname, $Firstname" -Path $OU -Company $Company -Department $department -AccountPassword $Password -ChangePasswordAtLogon $true
}

I'm working on a VM of windows server 2016. I'm trying to add several users at once to the AD using PowerShell ISE, but I'm running into several errors about the name. it's either not properly formed, empty or it's asking for it manually


Solution

  • You didn't say what it's complaining about, but I assume it's this:

     $Username   = $User.Username
     ...
     New-ADUser -SamAccountName $Username
    

    There are several User Naming Attributes in Active Directory. The sAMAccountName attribute is a short username. It must be 20 characters or less. Although the @ character is technically allowed, it is usually never used. In fact, AD Users and Computers won't let you put an @ in it.

    That "Username" you have in your file is a better fit for the userPrincipalName attribute.

    But you will still have to figure something out for the sAMAccountName. Our organization uses the last name (cropped at 18 characters) and first two letters of the first name. That would look something like this:

    Import-Module ActiveDirectory
    $file = "C:\Users\Administrator\Documents\UsersHR.csv"
    $targetDN = "OU=HR,OU=NTTLab,DC=NTTLab,DC=internal"
    
    $importedUsers = Import-Csv $file
    foreach ($user in $importedUsers)
    {
        $SamAccountName     = "$($User.Surname.Substring(0, [System.Math]::Min(18, $User.Surname.Length)))$($User.Firstname)"
        $UserPrincipalName  = $User.Username
        $Password           = $User.Password
        $Firstname          = $User.Firstname
        $Lastname           = $User.Surname
        $Name               = "$($User.Firstname) $($User.Surname)"
        $OU                 = "OU=HR,OU=NTTLab,DC=NTTLab,DC=internal" 
        $company            = $User.company
        $department         = $User.department
        $Password           = $User.Password
    
        New-ADUser -SamAccountName $SamAccountName -UserPrincipalName $UserPrincipalName -Name $Name -GivenName $Firstname -Surname $Lastname -Enabled $true -DisplayName "$Lastname, $Firstname" -Path $OU -Company $Company -Department $department -AccountPassword $Password -ChangePasswordAtLogon $true
    }
    

    I also fixed how you defined $Name, since it didn't have a space, and you were using $User.Lastname instead of $User.Surname.