当前位置: 首页 > news >正文

AD域控批量配置域用户下次登录需要修改密码

##### 读取csv文件批量设置域用户下次登录需要修改密码

Import-Module ActiveDirectory# 配置参数(SamAccountName参数为用户账号所在的列)
$CSVFile = "C:\temp\All_AD_Users.csv"
$UsernameColumn = "SamAccountName"# 读取CSV文件
$users = Import-Csv -Path $CSVFile -Encoding UTF8Write-Host "开始处理 $($users.Count) 个用户..." -ForegroundColor Yellow$successCount = 0
$failCount = 0foreach ($user in $users) {$username = $user.$UsernameColumnif (-not [string]::IsNullOrWhiteSpace($username)) {try {Set-ADUser -Identity $username -ChangePasswordAtLogon $trueWrite-Host "  成功: $username" -ForegroundColor Green$successCount++}catch {Write-Host "  失败: $username - $_" -ForegroundColor Red$failCount++}}
}Write-Host "`n处理完成!" -ForegroundColor Cyan
Write-Host "成功: $successCount" -ForegroundColor Green
Write-Host "失败: $failCount" -ForegroundColor Red

 

##### 批量设置所有域用户下次登录需要修改密码【带白名单模式,白名单中的用户例外,支持*通配符】

#####批量设置所有域用户下次登录需要修改密码【带白名单模式,白名单中的用户例外】
Import-Module ActiveDirectory# 排除特定账户(如管理员、服务账户)使用通配符
$ExcludedPatterns = @("Administrator", "Guest", "krbtgt", "svc_*", "*admin*", "test*", "boss*")# 获取所有启用用户
$AllUsers = Get-ADUser -Filter {Enabled -eq $true} -Properties SamAccountName, PasswordNeverExpires# 初始化数组
$UsersToSet = @()
$UsersNotToSet = @()# 分类用户
foreach ($User in $AllUsers) {$exclude = $false# 检查是否匹配排除模式foreach ($pattern in $ExcludedPatterns) {if ($User.SamAccountName -like $pattern) {$exclude = $truebreak}}# 分类用户if ($exclude -or $User.PasswordNeverExpires -eq $true) {$reason = if ($exclude) { "排除模式" } else { "密码永不过期" }$UsersNotToSet += [PSCustomObject]@{SamAccountName = $User.SamAccountNameReason = $reason}} else {$UsersToSet += $User}
}# 批量设置需要修改密码的用户
$successCount = 0
$failCount = 0Write-Host "`n开始设置需要修改密码的用户..." -ForegroundColor Yellow
foreach ($User in $UsersToSet) {try {Set-ADUser -Identity $User.SamAccountName -ChangePasswordAtLogon $trueWrite-Host "✓ 成功设置: $($User.SamAccountName)" -ForegroundColor Green$successCount++}catch {Write-Host "✗ 失败: $($User.SamAccountName) - $_" -ForegroundColor Red$failCount++# 将失败的用户添加到不设置列表中$UsersNotToSet += [PSCustomObject]@{SamAccountName = $User.SamAccountNameReason = "设置失败: $_"}}
}# 统计并显示不需要修改密码的用户
Write-Host "`n" + ("-" * 50) -ForegroundColor Gray
Write-Host "不需要修改密码的用户列表(共 $($UsersNotToSet.Count) 个):" -ForegroundColor Magentaif ($UsersNotToSet.Count -gt 0) {# 按用户名排序显示$UsersNotToSet | Sort-Object SamAccountName | ForEach-Object {Write-Host "  $($_.SamAccountName.PadRight(25)) - $($_.Reason)" -ForegroundColor Magenta}# 按原因分组统计Write-Host "`n按原因分组统计:" -ForegroundColor Magenta$UsersNotToSet | Group-Object Reason | ForEach-Object {Write-Host "  $($_.Name): $($_.Count) 个用户" -ForegroundColor Magenta}
} else {Write-Host "  没有不需要修改密码的用户" -ForegroundColor Magenta
}# 显示最终统计信息
Write-Host "`n" + ("=" * 50) -ForegroundColor Cyan
Write-Host "执行结果统计:" -ForegroundColor Cyan
Write-Host "  需要设置的用户总数: $($UsersToSet.Count)" -ForegroundColor White
Write-Host "  成功设置的用户数: $successCount" -ForegroundColor Green
Write-Host "  设置失败的用户数: $failCount" -ForegroundColor Red
Write-Host "  不需要设置的用户数: $($UsersNotToSet.Count)" -ForegroundColor Magenta
Write-Host "  总用户数(启用): $($AllUsers.Count)" -ForegroundColor White
Write-Host "=" * 50 -ForegroundColor Cyan# 可选:将结果导出到CSV文件
$timestamp = Get-Date -Format "yyyyMMdd_HHmmss"
$outputFile = "AD用户密码设置报告_$timestamp.csv"$report = @()
foreach ($user in $UsersToSet) {$status = if ($user.SamAccountName -in ($UsersNotToSet | Where-Object { $_.Reason -like "设置失败*" }).SamAccountName) {"失败"} else {"成功"}$report += [PSCustomObject]@{用户名 = $user.SamAccountName状态 = $status类别 = "需要设置"备注 = if ($status -eq "失败") { ($UsersNotToSet | Where-Object { $_.SamAccountName -eq $user.SamAccountName }).Reason } else { "已设置下次登录修改密码" }}
}foreach ($user in $UsersNotToSet | Where-Object { $_.Reason -notlike "设置失败*" }) {$report += [PSCustomObject]@{用户名 = $user.SamAccountName状态 = "未设置"类别 = "不需要设置"备注 = $user.Reason}
}$report | Sort-Object 用户名 | Export-Csv -Path $outputFile -NoTypeInformation -Encoding UTF8
Write-Host "`n详细报告已保存到: $outputFile" -ForegroundColor Cyan

 

##### 批量取消所有用户下次登录需要修改密码

# 导入AD模块
Import-Module ActiveDirectory# 颜色定义
$SuccessColor = "Green"
$ErrorColor = "Red"
$InfoColor = "Cyan"
$WarningColor = "Yellow"
$ProgressColor = "Gray"# 获取所有启用用户
$users = Get-ADUser -Filter {Enabled -eq $true}Write-Host "`n开始批量取消设置'下次登录需修改密码'标志..." -ForegroundColor $WarningColor
Write-Host "预计处理 $($users.Count) 个用户" -ForegroundColor $InfoColor
Write-Host ("-" * 50) -ForegroundColor $ProgressColor$successCount = 0
$failCount = 0for ($i = 0; $i -lt $users.Count; $i++) {$user = $users[$i]$progress = [math]::Round((($i + 1) / $users.Count) * 100, 1) try {# 同时取消两种设置方式Set-ADUser -Identity $user.SamAccountName -ChangePasswordAtLogon $falseSet-ADUser -Identity $user.SamAccountName -Replace @{pwdLastSet = -1}# 成功 - 绿色显示Write-Host "  ✓ $($user.SamAccountName)" -ForegroundColor $SuccessColor$successCount++}catch {# 失败 - 红色显示Write-Host "  ✗ $($user.SamAccountName) - $_" -ForegroundColor $ErrorColor$failCount++}
}# 使用不同颜色显示最终统计
Write-Host "`n" + ("=" * 50) -ForegroundColor White
Write-Host "处理完成!" -ForegroundColor White
Write-Host ("=" * 50) -ForegroundColor White
Write-Host "成功: $successCount" -ForegroundColor $SuccessColor
Write-Host "失败: $failCount" -ForegroundColor $ErrorColor
Write-Host "总计: $($users.Count)" -ForegroundColor $InfoColor

 

http://www.jsqmd.com/news/259784/

相关文章:

  • 2026.1.14总结
  • Stable Diffusion Web UI 绘世版 v4.6.1 整合包:一键极速部署,深度解决 AI 绘画环境配置与 CUDA 依赖难题
  • 巴菲特的公司治理观:股东利益至上
  • 电子发票批量提取导出合并助手
  • 提示工程架构师领域:高效提示团队打造的策略探讨
  • UART 协议规范
  • 基于 IPIDEA 的 GitHub 代码文件抓取与数据可视化实践(Python 实现)
  • 鲜花:我们的历史教育会变成什么样子?
  • 2026 年北京机场广告公司及机场广告牌公司综合实力排行榜单及选择建议指南:2026年北京机场广告公司及机场广告牌公司如何选?哪家好?哪家靠谱?选哪家? - Top品牌推荐
  • 挖掘大数据领域数据产品的商业价值
  • ssm495校园视频监控系统--论文
  • 开启WSL的ssh访问
  • 2026 年机场广告公司综合实力排行榜单及选择建议指南:2026年机场广告公司如何选?哪家好?哪家靠谱?选哪家? - Top品牌推荐
  • ssm488图书销售管理入库信息系统9f27q--论文
  • 学霸同款2026 AI论文工具TOP8:本科生毕业论文神器测评
  • day138—快慢指针—删除链表的倒数第N个结点(LeetCode-19)
  • 深度测评专科生必用TOP8AI论文软件:开题报告文献综述全攻略
  • Java毕设项目:基于springboot的旅行指南系统的设计与实现(源码+文档,讲解、调试运行,定制等)
  • Java毕设选题推荐:基于springboot的旅行指南攻略游记系统的设计与实现【附源码、mysql、文档、调试+代码讲解+全bao等】
  • Java毕设项目:基于springboot的宠物医院管理系统的设计与实现(源码+文档,讲解、调试运行,定制等)
  • 5.Spring Boot、Spring MVC 和 Spring 有什么区别
  • ssm489外婆家网上订餐平台--论文
  • 计算机Java毕设实战-基于SpringBoot + Vue的旅游出行指南系统基于springboot的旅行指南系统的设计与实现【完整源码+LW+部署说明+演示视频,全bao一条龙等】
  • 6.Spring 是如何解决循环依赖问题的?
  • Java计算机毕设之基于springboot的旅行智能推荐、行程规划、活动管理指南系统的设计与实现(完整前后端代码+说明文档+LW,调试定制等)
  • 【毕业设计】基于springboot的宠物医院管理系统的设计与实现(源码+文档+远程调试,全bao定制等)
  • ssm490王道考研课程资料购物网站--论文
  • mysql系统级文件损坏修复
  • ssm491网上订餐系统09hbt--论文
  • 【毕业设计】基于springboot的旅行指南系统的设计与实现(源码+文档+远程调试,全bao定制等)