Skip to main content

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 whenChangedGet-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 zhangsanDisable-ADAccount zhangsanUnlock-ADAccount zhangsan # 重置密码Set-ADAccountPassword -Identity zhangsan -NewPassword (ConvertTo-SecureString ”NewP@ss!” -AsPlainText -Force) -ResetSet-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 DescriptionGet-ADGroupMember ”Domain Admins” -Recursive # 递归查看成员Add-ADGroupMember -Identity ”Domain Admins” -Members zhangsanRemove-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-ADDefaultDomainPasswordPolicySet-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 DC01repadmin /queue DC01# 强制立即复制repadmin /syncall /AdeP # 域控健康检查dcdiag /vdcdiag /test:replicationsdcdiag /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, OperationMasterRolesMove-ADDirectoryServerOperationMasterRole -Identity DC02 -OperationMasterRole SchemaMaster# 或者用传统命令查看netdom query fsmo

7. DNS 管理

Clear-DnsServerCache -ComputerName DC01Get-DnsServerResourceRecord -ZoneName ”contoso.com” -Name ”web” -RRType AAdd-DnsServerResourceRecordA -ZoneName ”contoso.com” -Name ”web” -IPv4Address 10.0.0.10Remove-DnsServerResourceRecord -ZoneName ”contoso.com” -RRType A -Name ”web” -ForceGet-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, ModificationTimeGet-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, SiteObjectBLGet-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多年制造业信息化实践中的真实经验、技术干货与避坑指南。让技术少走弯路,让数字化真正创造价值。