使用 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
。
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
。