PowerShell AD域用户批量管理脚本
批量创建、禁用、导出AD域用户,支持从CSV导入用户信息,企业IT运维必备。
详细内容
# PowerShell AD域用户批量管理脚本
# 需要在域控制器或安装RSAT工具的机器上运行
# 使用方法: 以管理员身份运行PowerShell
# 检查AD模块
if (-not (Get-Module -Name ActiveDirectory -ListAvailable)) {
Write-Host "❌ 未安装ActiveDirectory模块" -ForegroundColor Red
Write-Host "请安装RSAT工具: Install-WindowsFeature RSAT-AD-PowerShell" -ForegroundColor Yellow
exit 1
}
Import-Module ActiveDirectory
# ========== 配置区 ==========
$DEFAULT_OU = "OU=Users,DC=example,DC=com" # 默认OU
$DEFAULT_DOMAIN = "example.com"
# ============================
function New-BatchUsers {
<# 从CSV批量创建用户 #>
param([string]$CsvPath = "users.csv")
if (-not (Test-Path $CsvPath)) {
Write-Host "CSV文件不存在: $CsvPath" -ForegroundColor Red
return
}
$users = Import-Csv $CsvPath
Write-Host "从CSV读取到 $($users.Count) 个用户" -ForegroundColor Cyan
foreach ($user in $users) {
$username = $user.Username
$displayName = $user.DisplayName
$password = ConvertTo-SecureString $user.Password -AsPlainText -Force
$ou = if ($user.OU) { $user.OU } else { $DEFAULT_OU }
try {
New-ADUser -Name $displayName `\n -SamAccountName $username `\n -UserPrincipalName "$username@$DEFAULT_DOMAIN" `\n -DisplayName $displayName `\n -GivenName $user.FirstName `\n -Surname $user.LastName `\n -EmailAddress $user.Email `\n -Path $ou `\n -AccountPassword $password `\n -Enabled $true `\n -ChangePasswordAtLogon $true
Write-Host "✅ 创建用户: $username ($displayName)" -ForegroundColor Green
# 添加到组
if ($user.Group) {
Add-ADGroupMember -Identity $user.Group -Members $username
Write-Host " 已添加到组: $($user.Group)"
}
} catch {
Write-Host "❌ 创建失败 $username : $_" -ForegroundColor Red
}
}
}
function Disable-InactiveUsers {
<# 禁用N天未登录的用户 #>
param([int]$Days = 90)
$cutoffDate = (Get-Date).AddDays(-$Days)
Write-Host "查找 ${Days} 天未登录的用户..." -ForegroundColor Cyan
$inactiveUsers = Get-ADUser -Filter * -Properties LastLogonDate | Where-Object {
$_.LastLogonDate -lt $cutoffDate -and $_.Enabled -eq $true
}
Write-Host "找到 $($inactiveUsers.Count) 个不活跃用户"
foreach ($user in $inactiveUsers) {
Write-Host " 禁用: $($user.SamAccountName) (最后登录: $($user.LastLogonDate))"
Disable-ADAccount -Identity $user.SamAccountName
}
Write-Host "完成,共禁用 $($inactiveUsers.Count) 个用户" -ForegroundColor Green
}
function Export-UsersToCsv {
<# 导出所有用户信息 #>
param([string]$OutputPath = "AD_users_$(Get-Date -Format 'yyyyMMdd').csv")
Write-Host "正在导出用户信息..." -ForegroundColor Cyan
Get-ADUser -Filter * -Properties EmailAddress, LastLogonDate, Created, Department, Title | \
Select-Object SamAccountName, DisplayName, EmailAddress, Department, Title, LastLogonDate, Created, Enabled | \
Export-Csv -Path $OutputPath -NoTypeInformation -Encoding UTF8
Write-Host "✅ 已导出到: $OutputPath" -ForegroundColor Green
}
# CSV模板示例
function Show-CsvTemplate {
Write-Host ""
Write-Host "CSV文件格式示例 (users.csv):" -ForegroundColor Yellow
Write-Host 'Username,DisplayName,FirstName,LastName,Email,Password,OU,Group'
Write-Host 'zhangsan,张三,张,三,zhangsan@example.com,P@ssw0rd,OU=技术部,DC=example,DC=com,技术组'
Write-Host 'lisi,李四,李,四,lisi@example.com,P@ssw0rd,OU=市场部,DC=example,DC=com,市场组'
Write-Host ""
}
# 菜单
Write-Host "========================================" -ForegroundColor Cyan
Write-Host " AD域用户批量管理工具" -ForegroundColor Cyan
Write-Host "========================================" -ForegroundColor Cyan
Write-Host "1. 从CSV批量创建用户"
Write-Host "2. 禁用不活跃用户(90天)"
Write-Host "3. 导出所有用户到CSV"
Write-Host "4. 显示CSV模板"
Write-Host "0. 退出"
Write-Host "========================================"
$choice = Read-Host "请选择操作"
switch ($choice) {
"1" { $csv = Read-Host "CSV文件路径"; New-BatchUsers -CsvPath $csv }
"2" { $days = Read-Host "不活跃天数(默认90)"; Disable-InactiveUsers -Days ($days -as [int]) }
"3" { Export-UsersToCsv }
"4" { Show-CsvTemplate }
default { Write-Host "退出" }
}