如何将指定CSV文件转换为Active Directory用户?求脚本指导
从CSV批量创建Active Directory用户的脚本优化指导
原脚本存在的问题
- CSV字段名不匹配:你的CSV表头是
firstname,但脚本里用$User.givenName调用,会导致无法读取用户名字;同理$User.sAMAccountName也不对,应该用CSV里的accountname字段。 - 语法错误:多条变量赋值写在同一行(比如
$UserOu="OU=Users,DC=abc,DC=com" $NewUsersList=Import-CSV),PowerShell会报错,必须拆分到单独行。 - 缺少密码配置:CSV里没有
Password列,$User.Password会返回空,无法完成用户密码设置,而AD用户必须设置密码才能启用。 New-ADUser参数不全:没指定用户要创建到哪个OU(-Path)、用户主体名称(UPN)、姓氏、显示名,也没有启用账户的设置,这些都是创建AD用户的必要项。
修正后的完整脚本
你的CSV内容(D:\students.csv):
firstname,lastname,office,phone,title,accountname zak,A,NY,123-123-123-123,Teacher,Zak.Alex
PowerShell脚本:
# 导入AD模块 Import-Module ActiveDirectory # 配置域信息和用户OU路径 $Domain = "@abc.com" $UserOu = "OU=Users,DC=abc,DC=com" # 导入CSV文件 $NewUsersList = Import-CSV "D:\students.csv" # 设置默认密码(如果CSV里没有密码列,用这个默认值;如果要从CSV读,需在表头加Password列) $DefaultPassword = ConvertTo-SecureString "P@ssw0rd123!" -AsPlainText -Force # 遍历CSV里的每个用户 ForEach ($User in $NewUsersList) { # 从CSV读取用户属性 $givenName = $User.firstname $surName = $User.lastname $sAMAccountName = $User.accountname $userPrincipalName = $sAMAccountName + $Domain $displayName = "$givenName $surName" $office = $User.office $phone = $User.phone $title = $User.title # 创建AD用户 New-ADUser -Name $displayName ` -GivenName $givenName ` -Surname $surName ` -SamAccountName $sAMAccountName ` -UserPrincipalName $userPrincipalName ` -DisplayName $displayName ` -Office $office ` -OfficePhone $phone ` -Title $title ` -Path $UserOu ` -AccountPassword $DefaultPassword ` -Enabled $true ` -ChangePasswordAtLogon $true # 强制用户首次登录修改密码 }
关键说明
- 字段匹配:严格对应CSV的表头字段名,比如
$User.firstname对应CSV里的firstname,确保能正确读取数据。 - 密码处理:这里用了默认密码,如果你需要从CSV读取每个用户的独立密码,只需在CSV表头添加
Password列,然后把$DefaultPassword换成ConvertTo-SecureString $User.Password -AsPlainText -Force。 - OU指定:通过
-Path $UserOu确保用户创建到指定的OU下,避免默认创建到Users容器。 - 账户启用:
-Enabled $true直接启用账户,-ChangePasswordAtLogon $true强制用户首次登录修改密码,符合安全规范。 - 语法规范:用反引号(`)换行拆分长命令,让脚本更易读;每条变量赋值单独一行,避免语法错误。
内容的提问来源于stack exchange,提问作者JAKY
相关产品推荐
相关产品推荐

