如果我能够生成成功和错误日志,那么这个脚本对我来说将是最好的批量 AD 用户创建脚本。
此脚本只需要 Csv 上的 FirstName 和 Lastname,可以节省几分钟。需要帮助生成日志,例如成功创建的用户列表以及已存在或创建失败的帐户。
$Users=Import-csv c:\users.csv
ForEach($User in $Users)
{
$FullName = $User.FirstName + " " + $User.LastName
$SAM = $User.FirstName.Substring(0,1) + $User.LastName #example John snow will be Jsnow
#$Sam=$User.FirstName+$User.LastName example john snow will be Johnsnow
#$Sam=$User.FirstName example john snow will be John
#$Sam= $User.firstName + "." + $User.lastName example john snow will be John.snow
$dnsroot = '@' + (Get-ADDomain).dnsroot
$UPN = $SAM + "$dnsroot "
$OU="CN=users, DC=Domain,DC=COM"
$email=$Sam + "$dnsroot "
New-ADUser -Name $FullName -AccountPassword (ConvertTo-SecureString “Password!1234” -AsPlainText -force) -GivenName $User.FirstName -Path $OU -SamAccountName $SAM -Surname $User.LastName -UserPrincipalName $UPN -EmailAddress $Email -Enabled $TRUE}
Write-Host "created $FullName"
答案1
$Users=Import-csv c:\users.csv
$failedUsers = @()
$usersAlreadyExist =@()
$successUsers = @()
$VerbosePreference = "Continue"
$LogFolder = "C:\temp"
ForEach($User in $Users)
{
$FullName = $User.FirstName + " " + $User.LastName
$SAM = $User.FirstName.Substring(0,1) + $User.LastName
$dnsroot = '@' + (Get-ADDomain).dnsroot
$UPN = $SAM + "$dnsroot "
$OU="CN=users, DC=Domain,DC=COM"
$email=$Sam + "$dnsroot "
try {
if (!(get-aduser -Filter {samaccountname -eq "$SAM"})){
New-ADUser -Name $FullName -AccountPassword (ConvertTo-SecureString “Password!1234” -AsPlainText -force) -GivenName $User.FirstName -Path $OU -SamAccountName $SAM -Surname $User.LastName -UserPrincipalName $UPN -EmailAddress $Email -Enabled $TRUE
Write-Verbose "[PASS] Created $FullName"
$successUsers += $FullName
}
else {
Write-Warning "[WARNING] Samaccount for username [$($FullName)] already exists"
$usersAlreadyExist += $FullName
}
}
catch {
Write-Warning "[ERROR]Can't create user [$($FullName)] : $_"
$failedUsers += $FullName
}
}
if ( !(test-path $LogFolder)) {
Write-Verbose "Folder [$($LogFolder)] does not exist, creating"
new-item $LogFolder -Force
}
Write-verbose "Writing logs"
$failedUsers | out-file -FilePath $LogFolder\FailedUsers.log -Force -Verbose
$usersAlreadyExist | out-file -FilePath $LogFolder\usersAlreadyExist.log -Force -Verbose
$successUsers | out-file -FilePath $LogFolder\successUsers.log -Force -Verbose