使用 Powershell 批量添加用户 AD

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
}

我正在使用 windows 服务器 2016 的虚拟机。 我正在尝试使用 PowerShell ISE 一次将多个用户添加到 AD,但我 运行 遇到了几个关于名称的错误。 它要么格式不正确、为空,要么是手动请求的

你没说它在抱怨什么,但我猜是这样的:

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

有几个User Naming Attributes in Active Directory. The sAMAccountName attribute是短用户名。它必须是 20 个字符或更少。尽管 @ 字符在技术上是允许的,但通常从未使用过。事实上,AD Users and Computers 不会让您在其中输入 @

您文件中的 "Username" 更适合 userPrincipalName attribute

但是您仍然需要为 sAMAccountName 想办法。我们的组织使用姓氏(裁剪为 18 个字符)和名字的前两个字母。那看起来像这样:

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
}

我还修复了您定义 $Name 的方式,因为它没有 space,并且您使用的是 $User.Lastname 而不是 $User.Surname