5000个域用户怎么管理?PowerShell几分钟搞定AD日常运维
在很多企业里,Active Directory(AD)已经运行了十几年。从员工账号管理,到电脑统一管理,再到ERP、MES、OA、PLM等系统的身份认证,AD几乎已经成为企业IT基础设施的重要组成部分。但我发现一个有趣的现象:很多IT工程师每天都在管理AD,却依然习惯:
-
打开“AD用户和计算机” -
一层一层点组织单位(OU) -
一个一个查账号 -
一个一个重置密码 -
一个一个禁用用户
人数少的时候问题不大。当企业规模达到:
-
1000个用户 -
5000个用户 -
数万台终端
再继续靠鼠标运维,效率就会越来越低。这时候,PowerShell的价值就体现出来了。同样是账号管理,手工操作可能需要半天,PowerShell往往只需要几行命令。
例如:
-
批量创建用户 -
批量禁用离职账号 -
导出域用户信息 -
查询密码过期情况 -
获取计算机资产清单 -
批量修改组织架构
这些原本需要数小时完成的工作,几分钟就能处理完毕。本篇文章结合实际运维经验,整理了AD管理员最常用的PowerShell命令
0. 准备工作
# 导入 AD 模块(PowerShell 7 需显式导入)
Import-Module ActiveDirectory
# 指定域控执行(避免连到非预期 DC)
Get-ADUser -Identity zhangsan -Server DC01.contoso.com
1. 用户管理
# 查询单个用户及属性
Get-ADUser -Identity zhangsan -Properties *
# 查找已禁用 / 已过期账户
Get-ADUser -Filter {Enabled -eq $false} -Properties whenChanged
Get-ADUser -Filter {AccountExpirationDate -lt (Get-Date)}
# 查找最近未登录账户(90天未登录)
$cutoff = (Get-Date).AddDays(-90)
Get-ADUser -Filter {lastLogonTimestamp -lt $cutoff} -Properties lastLogonTimestamp |
Select-Object Name, SamAccountName, @{n='LastLogon';e={[datetime]::FromFileTime($_.lastLogonTimestamp)}}
# 新建用户
New-ADUser -Name ”张三” -SamAccountName ”zhangsan” -UserPrincipalName ”zhangsan@contoso.com” `
-Path ”OU=员工,DC=contoso,DC=com” -AccountPassword (ConvertTo-SecureString ”P@ssw0rd!” -AsPlainText -Force) `
-Enabled $true -ChangePasswordAtLogon $true
# 启用 / 禁用 / 解锁
Enable-ADAccount zhangsan
Disable-ADAccount zhangsan
Unlock-ADAccount zhangsan
# 重置密码
Set-ADAccountPassword -Identity zhangsan -NewPassword (ConvertTo-SecureString ”NewP@ss!” -AsPlainText -Force) -Reset
Set-ADUser -Identity zhangsan -ChangePasswordAtLogon $true
# 下次登录强制改密
# 移动用户 / 删除(先禁用再删)
Move-ADObject -Identity ”CN=zhangsan,OU=员工,DC=contoso,DC=com” -TargetPath ”OU=离职,DC=contoso,DC=com”
Remove-ADUser zhangsan -Confirm
2. 组管理
Get-ADGroup -Filter * -Properties Description
Get-ADGroupMember ”Domain Admins” -Recursive
# 递归查看成员
Add-ADGroupMember -Identity ”Domain Admins” -Members zhangsan
Remove-ADGroupMember -Identity ”Domain Admins” -Members zhangsan -Confirm
# 查看用户属于哪些组
Get-ADPrincipalGroupMembership zhangsan
3. 计算机账户
Get-ADComputer -Filter {Enabled -eq $false}
# 查停用计算机
Get-ADComputer -Identity WS001 -Properties LastLogonDate, OperatingSystem
# 清理失效计算机(30天未登录)
$cutoff = (Get-Date).AddDays(-30)
Get-ADComputer -Filter {LastLogonDate -lt $cutoff} | Remove-ADComputer -Confirm
4. 密码策略与锁定排查
# 默认域密码策略
Get-ADDefaultDomainPasswordPolicy
Set-ADDefaultDomainPasswordPolicy -MaxPasswordAge 90 -MinPasswordLength 12
# 排查账户锁定来源(核心:查 4740 事件)
$user = ”zhangsan”
Get-WinEvent -LogName Security -FilterXPath ”*[System[EventID=4740]]” -MaxEvents 20 |
Where-Object { $_.Properties[0].Value -eq $user } |
Select-Object TimeCreated, @{n='Source';e={$_.Properties[1].Value}} | Format-Table -Auto
5. 复制与域控健康(日常必查)
# 复制汇总(最常用,一行看出全林复制状态)
repadmin /replsummary
# 单台 DC 入站/出站复制
repadmin /showrepl DC01
repadmin /queue DC01
# 强制立即复制
repadmin /syncall /AdeP
# 域控健康检查
dcdiag /v
dcdiag /test:replications
dcdiag /test:dns
# PowerShell 版复制状态
Get-ADReplicationPartnerMetadata -Target DC01 -Partition '*' -PartnerType Both |
Select-Object Server, Partner, LastReplicationSuccess, ConsecutiveFailureCount
6. FSMO 角色
Get-ADDomainController -Filter * | Select-Object Name, Domain, OperationMasterRoles
Move-ADDirectoryServerOperationMasterRole -Identity DC02 -OperationMasterRole SchemaMaster
# 或者用传统命令查看
netdom query fsmo
7. DNS 管理
Clear-DnsServerCache -ComputerName DC01
Get-DnsServerResourceRecord -ZoneName ”contoso.com” -Name ”web” -RRType A
Add-DnsServerResourceRecordA -ZoneName ”contoso.com” -Name ”web” -IPv4Address 10.0.0.10
Remove-DnsServerResourceRecord -ZoneName ”contoso.com” -RRType A -Name ”web” -Force
Get-DnsServerZone -ComputerName DC01
# 查看所有区域
Get-DnsServerDiagnostics | Select-Object EnableLoggingForQuery, EnableLoggingForZoneTransfer
# 查看 DNS 记录变更
dnscmd DC01 /enumrecords contoso.com /continue
8. GPO 组策略
Get-GPO -All | Select-Object DisplayName, Owner, ModificationTime
Get-GPOReport -Name ”默认域策略” -ReportType HTML -Path ”C:\temp\gpo.html”
# 导出报告
Backup-GPO -Name ”默认域策略” -Path ”C:\backup\gpo”
# 备份
New-GPO -Name ”禁用U盘” | New-GPLink -Target ”OU=员工,DC=contoso,DC=com”
# 建策略并链接
# 强制刷新(客户端执行)
gpupdate /force
# 查看某机器生效的策略结果
gpresult /r /scope computer
9. 时间同步(域控时间错乱会直接导致 Kerberos 认证失败)
w32tm /query /status
# 查看同步状态
w32tm /query /source
# 查看时间源
w32tm /config /manualpeerlist:”ntp.aliyun.com,0x1” /syncfromflags:manual /update
# 改时间源
w32tm /resync
# 立即同步
Restart-Service w32time
# 重启时间服务
10. 站点与子网
Get-ADReplicationSite -Filter * | Select-Object Name, Options, SiteObjectBL
Get-ADReplicationSubnet -Filter *
New-ADReplicationSite -Name ”Shanghai-Site”
New-ADReplicationSubnet -Name ”10.10.0.0/24” -Site ”Shanghai-Site”
11. 日志与审计(常见事件 ID)
# 4740 账户被锁、4720 新用户、4732 加组、4724 改密码、4768 Kerberos 请求
Get-WinEvent -LogName Security -MaxEvents 1000 -FilterXPath ”*[System[EventID=4720]]” |
Select-Object TimeCreated, @{n='User';e={$_.Properties[0].Value}}
# 查域控 DNS/系统错误日志
Get-EventLog -LogName System -EntryType Error -Newest 50 | Where-Object {$_.Source -match 'DNS|NETLOGON|NTDS'}
12. 日常巡检脚本骨架
$report = @()
# 1. 复制状态
$report += repadmin /replsummary | Out-String
# 2. 无法登录的账户(密码过期)
$report += ”`n=== 密码快过期/已过期的账户 ===”
$report += Get-ADUser -Filter {Enabled -eq $true} -Properties msDS-UserPasswordExpiryTimeComputed |
Where-Object { $_.msDS-UserPasswordExpiryTimeComputed -ne $null -and [datetime]::FromFileTime($_.msDS-UserPasswordExpiryTimeComputed) -lt (Get-Date).AddDays(7) } |
Select-Object SamAccountName, @{n='Expiry';e={[datetime]::FromFileTime($_.msDS-UserPasswordExpiryTimeComputed)}} | Out-String
# 3. 时间同步
$report += ”`n=== 时间状态 ===”
$report += w32tm /query /status | Out-String
$report | Out-File ”C:\temp\dc_audit_$(Get-Date -Format yyyyMMdd).txt”
几点实用建议:
-
先 Import-Module ActiveDirectory;PowerShell 5.1(Windows 自带)比 7 兼容性更稳,管理脚本建议用 5.1。 -
锁定排查先看事件日志里 4740 的 Caller Computer Name,比猜更准。 -
日常最值得盯的 3 个指标:复制失败(repadmin)、时间偏移(w32tm)、账户大量锁定(4740 事件)。
PowerShell不仅仅是一门脚本语言,更是一名Windows运维工程师迈向自动化运维的必经之路。学会它之后,你会发现:
以前需要半天完成的工作,现在可能几分钟就能搞定;
以前需要熬夜处理的任务,现在可能定时脚本就能自动完成。
后续我还会持续分享:
✅ PowerShell自动化运维实战
✅ Active Directory最佳实践
✅ Windows Server运维技巧
✅ Exchange管理命令大全
✅ DNS与DHCP故障排查
✅ 域控高可用部署方案
✅ AD与ERP、OA、企业微信统一身份认证实践
欢迎关注本公众号。我会持续分享20多年制造业信息化实践中的真实经验、技术干货与避坑指南。让技术少走弯路,让数字化真正创造价值。
Revision #3
Created 2026-08-29 05:31:18 UTC by Admin
Updated 2026-08-29 05:37:06 UTC by Admin
Created 2026-08-29 05:31:18 UTC by Admin
Updated 2026-08-29 05:37:06 UTC by Admin