- 原生命令行工具:Windows 自带,历史悠久,功能稳定。
- PowerShell 模块:现代、功能强大、易于脚本化,是微软目前主推的管理方式。
下面我将详细介绍这两类中最常用和最重要的命令。
原生命令行工具 (CMD)
这些工具在 cmd.exe 中运行,虽然有些老旧,但在很多场景下依然非常快速和有效。
用户和计算机管理
| 命令 |
全称 |
主要用途 |
示例 |
dsadd |
Directory Service Add |
添加用户、计算机、组等对象。 |
dsadd user "CN=John Doe,OU=Users,DC=corp,DC=local" -samid jdoe -pwd P@ssw0rd! |
dsmod |
Directory Service Modify |
修改现有对象的属性,如用户密码、描述等。 |
dsmod user "CN=John Doe,OU=Users,DC=corp,DC=local" -pwd NewP@ssw0rd! |
dsrm |
Directory Service Remove |
删除 AD 对象。 |
dsrm "CN=John Doe,OU=Users,DC=corp,DC=local" -noprompt |
dsquery |
Directory Service Query |
在 AD 中查找对象,功能强大,是其他 ds* 命令的输入源。 |
dsquery user -name "John Doe" dsquery user -inactive 8 (查找8天未登录的用户) |
dsget |
Directory Service Get |
显示对象的详细属性,通常与 dsquery 配合使用。 |
dsget user "CN=John Doe,OU=Users,DC=corp,DC=local" -samid -email -display |
net user |
Network User |
管理本地用户账户,但在域控制器上也可以管理域账户。 |
net user jdoe * (修改用户密码) net user jdoe /domain (查看域用户信息) |
net group |
Network Group |
管理域本地组和全局组。 |
net group "Domain Admins" jdoe /add (将用户添加到组) net group "IT Support" /domain (列出组成员) |
组织单位 和域管理
| 命令 |
全称 |
主要用途 |
示例 |
dsmove |
Directory Service Move |
移动 AD 对象(将用户从一个 OU 移动到另一个 OU)或重命名对象。 |
dsmove "CN=John Doe,OU=Users,DC=corp,DC=local" -newparent "OU=IT,OU=Users,DC=corp,DC=local" |
dsacls |
Directory Service ACLs |
查看、修改 AD 对象的访问控制列表。 |
dsacls "OU=IT,DC=corp,DC=local" (查看 OU 的权限) |
站点和服务管理
| 命令 |
全称 |
主要用途 |
示例 |
repadmin |
Replication Administrator |
极其重要,用于诊断和管理 AD 复制。 |
repadmin /showrepl (显示所有复制伙伴的复制状态) repadmin /replsummary (显示复制错误的摘要) repadmin /showutdvec DC01 (显示更新向量) |
dcdiag |
Domain Controller Diagnosis |
诊断工具,检查域控制器的健康状况和配置。 |
dcdiag /v (详细模式运行所有测试) dcdiag /test:DNS /s:DC01 (测试特定DC的DNS功能) |
PowerShell 模块 (现代、推荐)
PowerShell 提供了更丰富的功能、更清晰的结构和强大的脚本能力,你需要先安装 Active Directory for Windows PowerShell 模块(在 Windows Server 上通常已预装)。
核心模块导入
在开始之前,确保已导入 AD 模块:
Import-Module ActiveDirectory
用户管理
| 命令 (Cmdlet) |
主要用途 |
示例 |
New-ADUser |
创建新的 AD 用户账户。 |
New-ADUser -Name "Jane Smith" -SamAccountID jsmith -UserPrincipalName jsmith@corp.local -Path "OU=Users,DC=corp,DC=local" -AccountPassword (Read-Host -AsSecureString "Enter Password") |
Set-ADUser |
修改现有 AD 用户的属性。 |
Set-ADUser -Identity jsmith -Department "Sales" -Title "Sales Manager" Set-ADAccountPassword -Identity jsmith -NewPassword (ConvertTo-SecureString -AsPlainText "NewP@ssw0rd!" -Force) -Reset |
Get-ADUser |
查询和获取 AD 用户信息。 |
Get-ADUser -Filter { Department -eq "Sales" } Get-ADUser -Identity jsmith -Properties Department, Title, Manager |
Remove-ADUser |
删除 AD 用户账户。 |
Remove-ADUser -Identity jsmith -Confirm:$false |
Enable-ADAccount / Disable-ADAccount |
启用或禁用用户账户。 |
Disable-ADAccount -Identity jsmith |
Move-ADObject |
移动 AD 对象(比 dsmove 更灵活)。 |
Move-ADObject -Identity "CN=Jane Smith,OU=Users,DC=corp,DC=local" -TargetPath "OU=Sales,OU=Users,DC=corp,DC=local" |
组管理
| 命令 (Cmdlet) |
主要用途 |
示例 |
New-ADGroup |
创建新的 AD 组。 |
New-ADGroup -Name "Sales Team" -SamAccountID SalesTeam -GroupScope Global -Path "OU=Groups,DC=corp,DC=local" |
Add-ADGroupMember |
将成员添加到组。 |
Add-ADGroupMember -Identity "Sales Team" -Members jsmith, jdoe |
Remove-ADGroupMember |
从组中移除成员。 |
Remove-ADGroupMember -Identity "Sales Team" -Members jdoe |
Get-ADGroupMember |
列出组的所有成员。 |
Get-ADGroupMember -Identity "Domain Admins" |
Get-ADGroup |
查询和获取 AD 组信息。 |
Get-ADGroup -Filter { Name -like "Team*" } |
计算机 和对象管理
| 命令 (Cmdlet) |
主要用途 |
示例 |
Get-ADComputer |
查询域中的计算机。 |
Get-ADComputer -Filter { OperatingSystem -like "*Windows 10*" } Get-ADComputer -Identity WS001 -Properties LastLogonDate, OperatingSystem |
Get-ADOrganizationalUnit |
查询组织单位。 |
Get-ADOrganizationalUnit -Filter * -Properties * | Format-Table Name, City, Country |
Get-ADObject |
通用对象查询器,可以查询任何类型的 AD 对象。 |
Get-ADObject -Filter { ObjectClass -eq "contact" } |
站点、服务和复制管理
| 命令 (Cmdlet) |
主要用途 |
示例 |
Get-ADReplicationFailure |
查找复制错误,是 repadmin /showrepl 的 PowerShell 版本。 |
Get-ADReplicationFailure -Target DC01 |
Get-ADReplicationSite |
获取 AD 站点信息。 |
Get-ADReplicationSite -Filter * |
Get-ADReplicationSubnet |
获取 AD 子网信息。 |
Get-ADReplicationSubnet -Filter * |
如何选择使用哪个工具?
| 场景 |
推荐工具 |
原因 |
| 快速执行单次任务 |
原生命令 (CMD) |
命令简短,记忆方便,对于熟悉的老管理员来说速度很快,快速重置一个用户密码。 |
| 编写脚本和自动化 |
PowerShell |
拥有强大的变量、循环、条件判断和错误处理能力,可以将多个复杂操作组合成一个脚本。 |
| 复杂查询和筛选 |
PowerShell |
Get-ADUser 的 -Filter 参数比 dsquery 更灵活,可以轻松结合多个条件,并使用 -Properties 获取任意属性。 |
| 深度诊断和故障排除 |
原生命令 (CMD) |
repadmin 和 dcdiag 是行业标准的诊断工具,提供了非常底层和详细的复制和健康状态信息,是排查问题的首选。 |
| 日常批量管理 |
PowerShell |
一次性禁用所有超过90天未登录的用户,或者将某个 OU 的所有用户移动到另一个组,使用 PowerShell 循环脚本非常高效。 |
| 特性 |
原生命令 |
PowerShell |
| 学习曲线 |
较低,命令简短 |
较高,需要理解 .NET 对象和管道 |
| 功能 |
基础,稳定 |
强大,全面,覆盖所有 AD 功能 |
| 脚本能力 |
弱,难以实现复杂逻辑 |
极强,是真正的自动化语言 |
| 交互性 |
一般 |
优秀,可以方便地处理返回的对象 |
| 未来趋势 |
逐渐被取代 |
微软官方推荐和未来方向 |
对于新的 AD 管理员,强烈建议直接从 PowerShell 开始学习,因为它代表了未来的方向,并且能让你更高效、更灵活地管理 Active Directory,也要掌握 repadmin 和 dcdiag 这类经典的诊断工具。