JanuszKornath/Active-Directory
GitHub: JanuszKornath/Active-Directory
一套用于 Active Directory 账户生命周期管理的 PowerShell 脚本工具集,支持自动化清理闲置账户与按计划批量执行账户启停及组变更。
Stars: 0 | Forks: 0
# Active Directory 环境管理脚本与工具合集
## inactive_users.ps1
此 PowerShell 脚本会扫描 Active Directory 域,查找超过 180 天未登录的用户账户,将结果导出至 CSV 文件,并自动禁用所有识别出的账户(明确添加到白名单中的账户除外)。
此外,该脚本还会生成包含以下内容的详细日志文件:
- 脚本执行的日期和时间
- 所有被禁用的用户账户
- 每个用户的完整 OU 路径
- 他们的上次登录时间戳
这使其成为自动定期清理操作的理想选择,例如通过 Windows Task Scheduler 运行。
### 功能:
### 输出文件
脚本每次执行都会生成两个文件:
1. CSV 文件
示例:
C:\Temp\AD_StaleUsers_2025-02-14_10-33.csv
包含:
- 显示名称
- SamAccountName
- 启用状态
- LastLogonDate
- DistinguishedName(完整 OU 路径)
2. 日志文件
示例:
C:\Temp\AD_StaleUsers_Deactivation_2025-02-14_10-33.txt
内容示例:
在 2025-02-14 10:33,以下账户已被禁用:
Max Mustermann,用户名 mmustermann,位于组织单位 HQ / Users / IT,原因是该用户自 2024-01-01 09:12 以来未曾登录。
### 要求:
- Windows Server 或 Windows 10+
- RSAT / ActiveDirectory PowerShell 模块
- 足够的 AD 权限(例如,Domain Admin)
- PowerShell 5.1 或 PowerShell 7
- 对 AD OU 结构的访问权限
## scheduled_account_tasks.ps1
此 PowerShell 脚本是 `inactive_users.ps1` 的对应脚本:它不会禁用账户,而是启用被禁用的用户账户和/或根据 CSV 任务文件更改组成员身份。它旨在通过 Windows Task Scheduler 在特定时间运行——例如:“新员工周一早上 06:00 入职——启用他们的账户并将他们添加到部门组中。”
### 工作原理
您需要提前准备一个 CSV 任务文件(默认:`C:\Temp\AD_AccountTasks.csv`),然后安排脚本每天运行——每一行都会在预定的日期被执行:
```
SamAccountName,Enable,AddGroups,RemoveGroups,Datum
mmustermann,Ja,VPN-Benutzer;Abt-Vertrieb,Praktikanten,2026-07-27
jdoe,Nein,Abt-IT,,28.07.2026
asmith,Ja,,,
```
- **SamAccountName** — 要处理的用户
- **Enable** — `Ja`/`Yes`/`true`/`1` 启用账户;任何其他值则保持原样不动
- **AddGroups** — 要将用户添加到的组(多个组用 `;` 分隔)
- **RemoveGroups** — 要将用户从中移除的组(多个组用 `;` 分隔)
- **Datum** — 可选的执行日期(`yyyy-MM-dd` 或 `dd.MM.yyyy`)。带有日期的行只有在该日期到达后才会被执行;在此之前,它们将原封不动地保留在任务文件中。没有日期的行将在下次运行时被执行。通过这种方式,只需一个中央任务文件加上一个每日的计划任务,就能处理一周中不同日子的不同更改——只需不断添加带有相应日期的行即可。
每次运行后,已处理的行会被移动到归档文件(`AD_AccountTasks_verarbeitet_.csv`)中,这样就不会被意外执行两次,而未到期的行则保留在任务文件中供未来运行使用(使用 `-KeepTaskFile` 可禁用此功能)。如果某行的日期已过,但该行仍在任务文件中(例如,服务器当天处于关闭状态),它会在下次运行时被补执行。
### 功能:
### 参数
| 参数 | 默认值 | 描述 |
|---|---|---|
| `-TaskFile` | `C:\Temp\AD_AccountTasks.csv` | CSV 任务文件的路径 |
| `-LogDir` | `C:\Temp` | 日志文件的目录 |
| `-KeepTaskFile` | 关闭 | 运行后不归档任务文件 |
### Task Scheduler 设置
与 `inactive_users.ps1` 不同,此脚本有意**不**进行自动提权——在无人值守的计划任务中,UAC 提示会一直卡住。相反,应配置任务本身:
### 要求:
- Windows Server 或 Windows 10+
- RSAT / ActiveDirectory PowerShell 模块
- 足够的 AD 权限(例如,Account Operator 或委派权限)
- PowerShell 5.1 或 PowerShell 7
标签:AI合规, Libemu, MSSQL, Terraform 安全