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

每日逐个禁用AD账户脚本优化:实现断点续跑与邮件通知

优化PowerShell脚本实现AD账户每日禁用的断点续跑功能

原脚本的核心问题是缺乏持久化的进度记录机制,且依赖Start-Sleep维持每日执行逻辑,导致计划任务重启后无法从断点继续。以下是优化后的实现方案:

优化思路

  • 新增进度记录文件持久化已处理的账户列表
  • 每次脚本启动时,对比原始用户列表与已处理列表,定位第一个未处理的账户
  • 去掉Start-Sleep,由Windows计划任务的每日触发逻辑替代脚本内的等待
  • 无论账户禁用成功或失败,均标记该账户为已处理,避免重复执行

优化后的完整脚本

# 配置参数
$userListPath = "C:\userlist.txt"
$processedListPath = "C:\processed_users.txt"
$emailFrom = "your@email.com"
$emailTo = "recipient@email.com"
$smtpServer = "smtp.yourserver.com"

# 读取原始用户列表与已处理列表
$allUsers = Get-Content -Path $userListPath -ErrorAction Stop
$processedUsers = if (Test-Path -Path $processedListPath) {
    Get-Content -Path $processedListPath
} else {
    @()
}

# 筛选出第一个未处理的用户
$nextUser = $allUsers | Where-Object { $_ -notin $processedUsers } | Select-Object -First 1

if ($nextUser) {
    try {
        # 禁用AD账户
        Disable-ADAccount -Identity $nextUser -ErrorAction Stop
        # 发送成功通知
        Send-MailMessage -From $emailFrom -To $emailTo `
            -Subject "AD账户禁用成功" `
            -Body "账户 $nextUser 已成功禁用。" `
            -SmtpServer $smtpServer -ErrorAction Stop
    } catch {
        # 发送错误通知
        Send-MailMessage -From $emailFrom -To $emailTo `
            -Subject "AD账户禁用失败" `
            -Body "禁用账户 $nextUser 时出错:`n$_" `
            -SmtpServer $smtpServer -ErrorAction SilentlyContinue
    } finally {
        # 将当前用户写入已处理列表(无论成功失败都记录)
        Add-Content -Path $processedListPath -Value $nextUser -ErrorAction Stop
    }
} else {
    # 所有用户已处理完成,发送通知
    Send-MailMessage -From $emailFrom -To $emailTo `
        -Subject "AD账户禁用任务完成" `
        -Body "所有待处理的AD账户已全部处理完毕。" `
        -SmtpServer $smtpServer -ErrorAction Stop
}

关键部分说明

  1. 进度记录逻辑:

    • 脚本启动时检查processed_users.txt是否存在,不存在则初始化空列表
    • 通过Where-Object { $_ -notin $processedUsers }筛选未处理账户,取第一个执行
    • finally块确保无论禁用操作成功或失败,当前用户都会被写入已处理文件,避免重复执行
  2. 计划任务适配:

    • 移除原脚本中的Start-Sleep,脚本每次仅处理一个账户后退出
    • 保持Windows计划任务的每日凌晨12:01触发配置即可实现每日处理一个账户的需求
  3. 异常处理增强:

    • 对Disable-ADAccount和Send-MailMessage添加-ErrorAction Stop确保异常能被捕获
    • 错误邮件发送时使用-ErrorAction SilentlyContinue避免因邮件发送失败导致进度记录未执行

内容的提问来源于stack exchange,提问作者Senior Systems Engineer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 13:18:30