You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell遍历用户列表结合自定义函数批量重置AD账户密码

实现方案

你当前代码的核心问题是函数内的$Password是局部作用域变量,且函数没有返回值,外部代码无法捕获到函数内生成的密码,按以下步骤调整即可实现批量重置逻辑:

第一步:修正密码生成函数

首先修改New-Password的逻辑,去掉仅用于控制台打印的Write-Host,将生成的密码作为函数返回值输出,同时确保你自定义的Get-RandomCharacters、Scramble-String的执行结果正确赋值给$Password:

Function New-Password {
    $Password = $null
    # 注意要把两个辅助函数的执行结果赋值给$Password,否则变量始终为空
    $Password = Get-RandomCharacters
    $Password = $Password | Scramble-String
    # 直接返回生成的明文密码,供外部调用捕获
    return $Password
}

注意:你自定义的Get-RandomCharacters、Scramble-String函数需要放在New-Password之前定义,否则运行时会报命令不存在的错误。

第二步:编写批量处理逻辑

流程为:加载AD模块 → 导入用户名列表 → 遍历每个用户名,单独生成随机密码 → 转换为安全字符串后执行密码重置 → 记录操作结果留底。
完整可运行代码如下:

# 加载Active Directory模块,需提前安装RSAT-AD-PowerShell功能
Import-Module ActiveDirectory -ErrorAction Stop

# --- 此处粘贴你自己实现的Get-RandomCharacters、Scramble-String函数 ---
# Function Get-RandomCharacters { ... 你的原有逻辑 ... }
# Function Scramble-String { ... 你的原有逻辑 ... }

# 修正后的密码生成函数
Function New-Password {
    $Password = $null
    $Password = Get-RandomCharacters
    $Password = $Password | Scramble-String
    return $Password
}

# 导入用户名列表,示例为每行一个用户名的txt文件,替换为你实际的文件路径
$userList = Get-Content -Path "C:\scripts\ad_user_list.txt"

# 遍历执行重置
foreach ($adUser in $userList) {
    try {
        # 为当前用户生成独立随机密码
        $genPwd = New-Password
        # 转换为AD命令要求的安全字符串格式
        $securePwd = ConvertTo-SecureString -AsPlainText $genPwd -Force
        # 执行密码重置
        Set-ADAccountPassword -Identity $adUser -Reset -NewPassword $securePwd
        
        # 可选:重置成功后追加记录到结果csv,方便后续核对
        [PSCustomObject]@{
            用户名 = $adUser
            新密码 = $genPwd
            重置时间 = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
            执行状态 = "成功"
        } | Export-Csv -Path "C:\scripts\reset_result.csv" -Append -NoTypeInformation -Encoding UTF8
    }
    catch {
        # 记录失败信息
        [PSCustomObject]@{
            用户名 = $adUser
            新密码 = $genPwd
            重置时间 = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
            执行状态 = "失败:$($_.Exception.Message)"
        } | Export-Csv -Path "C:\scripts\reset_result.csv" -Append -NoTypeInformation -Encoding UTF8
    }
}

注意事项

  • 运行脚本的账号需要拥有对应AD组织单元的账户密码重置权限,运行前请确认已安装RSAT AD PowerShell管理工具
  • 导出的结果csv包含所有用户的明文密码,请妥善加密存储,避免信息泄露
  • 若你的用户名列表是csv格式,将Get-Content替换为Import-Csv,遍历时取对应的用户名列即可,例如$userList = Import-Csv xxx.csv | Select-Object -ExpandProperty 用户名

内容的提问来源于stack exchange,提问作者Rich

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 21:30:42