PowerShell批量重置AD用户密码:无特殊字符及自定义密码需求
PowerShell AD密码重置脚本解决方案
需求1:生成仅含大小写字母和数字的随机密码
修改原脚本的密码生成逻辑,限定字符池为大小写字母和数字即可:
$ListOfUsers = Get-Content C:\temp\list.txt foreach ($user in $ListOfUsers) { # 定义仅包含大小写字母和数字的字符池 $charPool = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789' # 从字符池随机选取9个字符生成密码 $Password = -join ($charPool.ToCharArray() | Get-Random -Count 9) # 转换为安全字符串 $Pass = ConvertTo-SecureString $Password -AsPlainText -Force # 重置AD用户密码 Set-ADAccountPassword $user -NewPassword $Pass -Reset # 输出用户名和密码 Write-Host "$user : $Password" }
需求2:从文本文件导入对应密码设置
逗号分隔格式(如user_passwords.csv)
假设文件每行格式为用户名,密码(无表头),使用以下脚本批量设置:
# 导入用户密码列表,指定表头 $userPasswordList = Import-Csv -Path C:\temp\user_passwords.csv -Header UserName, Password foreach ($entry in $userPasswordList) { $securePass = ConvertTo-SecureString $entry.Password -AsPlainText -Force Set-ADAccountPassword $entry.UserName -NewPassword $securePass -Reset Write-Host "已重置用户 $($entry.UserName) 的密码" }
空格分隔格式(如user_passwords.txt)
如果文件每行格式为用户名 密码(空格分隔),改用以下写法:
Get-Content C:\temp\user_passwords.txt | ForEach-Object { $user, $password = $_ -split '\s+', 2 $securePass = ConvertTo-SecureString $password -AsPlainText -Force Set-ADAccountPassword $user -NewPassword $securePass -Reset Write-Host "已重置用户 $user 的密码" }
关于New-Password命令的报错解决
"New-Password未被识别为有效命令":
New-Password不是PowerShell内置命令,若使用第三方模块(如PasswordGenerator),需先执行Install-Module PasswordGenerator(管理员权限)再运行Import-Module PasswordGenerator;若为自定义函数,需确保函数定义在脚本执行前已加载。"Symbols参数不存在":说明你调用的
New-Password函数未定义Symbols参数,需检查函数参数列表,改用函数支持的参数(比如部分实现用ExcludeSymbols移除特殊字符)。"List
::new()方法未找到" :这是.NET语法兼容问题,PowerShell中创建泛型列表需用New-Object而非C#构造语法,正确写法为:
$charList = New-Object System.Collections.Generic.List[char]
若自定义New-Password函数出现此错误,需修改函数内的列表创建代码为上述PowerShell兼容写法。
内容的提问来源于stack exchange,提问作者S.Mahmood
相关产品推荐
相关产品推荐

