#注意事项用于导入的CSV文件,必须以UTF-8方式保存
#建议使用Powershell ISE,可以直接对复制代码编辑和运行,也可以快速编辑csv文件
# 导入ActiveDirectory模块
Import-Module ActiveDirectory
# 导入CSV文件
$users = Import-Csv -Path "C:\usr.csv"
# 遍历CSV中的每一行
foreach ($user in $users) {
try {
# 尝试获取用户
$adUser = Get-ADUser -Filter "SamAccountName -eq '$($user.SamAccountName)'" -Properties * -ErrorAction SilentlyContinue
# 将Enabled列的值转换为布尔类型
$enabledState = [bool]::Parse($user.Enabled)
# 如果用户不存在,则创建新用户
if (-not $adUser) {
# 创建新用户
New-ADUser -SamAccountName $user.SamAccountName -Surname $user.Surname -GivenName $user.GivenName `
-Name $user.Name -UserPrincipalName $user.UserPrincipalName -DisplayName $user.Name -Department $user.Department `
-Title $user.Title -Path $user.Path -AccountPassword(ConvertTo-SecureString -AsPlainText $user.AccountPassword -Force) `
-Enabled ($user.Enabled -eq "True") -PasswordNeverExpires $true
Write-Host "Created new user: $($user.SamAccountName) $($user.Name)"
} else {
# 如果用户存在,则更新用户属性
Set-ADUser -Identity $user.SamAccountName -Surname $user.Surname -GivenName $user.GivenName `
-UserPrincipalName $user.UserPrincipalName -Department $user.Department -Title $user.Title -DisplayName $user.DisplayName `
-Enabled ($user.Enabled -eq "True") -PasswordNeverExpires $true
Write-Host "Updated user: $($user.SamAccountName) $($user.Name)"
}
}
catch {
# 如果发生错误,输出错误信息
Write-Host "Error processing user: $($user.SamAccountName) $($user.Name). Error: $_"
}
}
#目前碰到的问题
1、如果修改代码增加更新信息EmailAddress和 Path(OU信息)时,会提示无法转换值,或者提示值为空,移除代码里EmailAddress和 Path的内容即可。
以下是CSV的表头参考
SamAccountName | Surname | GivenName | DisplayName | Name | UserPrincipalName | EmailAddress | Department | Title | Path | AccountPassword | Enabled |
990013 | 谭 | 某 | 谭某 | 谭某 | 900013@ldap.xxx.com | xxx@xxx.com | 服务中心 | 清洁工 | OU=UserID,OU=xxx,DC=ldap,DC=xxx,DC=com | xxxxxxxxx | True |