通过掌握这些 ADFind 和 PowerShell 的命令,你可以高效地管理 Active Directory 环境中的各种对象和属性。这些方法对于日常的用户管理、组管理、计算机管理等任务非常有用。如果你希望将这些命令结合到更大的自动化脚本中,PowerShell 提供了非常强大的支持。
ADFind 是一个用于查询和操作 Active Directory 数据的命令行工具,它的功能与 PowerShell 中的 cmdlet 一些相似,但有不同的实现方式。下面是按功能分类的 ADFind 对应 PowerShell cmdlet 的表格化对比。
| 功能分类 | ADFind 命令 | PowerShell cmdlet 示例 |
|---|---|---|
| 用户管理 | ADFind -b "OU=Users,DC=example,DC=com" -f "(objectClass=user)" |
Get-ADUser -Filter * -SearchBase "OU=Users,DC=example,DC=com" |
| 修改用户属性 | ADFind -b "OU=Users,DC=example,DC=com" -f "(sAMAccountName=johndoe)" -set "Title=Manager" |
Set-ADUser -Identity "johndoe" -Title "Manager" |
| 删除用户 | ADFind -b "OU=Users,DC=example,DC=com" -f "(sAMAccountName=johndoe)" -delete |
Remove-ADUser -Identity "johndoe" |
| 查询用户信息 | ADFind -b "OU=Users,DC=example,DC=com" -f "(sAMAccountName=johndoe)" |
Get-ADUser -Identity "johndoe" -Properties * |
| 启用/禁用用户账户 | ADFind -b "OU=Users,DC=example,DC=com" -f "(sAMAccountName=johndoe)" -set "userAccountControl=514" |
Disable-ADUser -Identity "johndoe" <br> Enable-ADUser -Identity "johndoe" |
| 密码重置 | ADFind -b "OU=Users,DC=example,DC=com" -f "(sAMAccountName=johndoe)" -set "unicodePwd={newpassword}" |
Set-ADAccountPassword -Identity "johndoe" -NewPassword (ConvertTo-SecureString -AsPlainText "NewPassword123" -Force) -Reset |
| 组管理 | ADFind -b "OU=Groups,DC=example,DC=com" -f "(objectClass=group)" |
Get-ADGroup -Filter * -SearchBase "OU=Groups,DC=example,DC=com" |
| 修改组属性 | ADFind -b "OU=Groups,DC=example,DC=com" -f "(cn=HR Group)" -set "Description=HR Management" |
Set-ADGroup -Identity "HR Group" -Description "HR Management" |
| 删除组 | ADFind -b "OU=Groups,DC=example,DC=com" -f "(cn=HR Group)" -delete |
Remove-ADGroup -Identity "HR Group" |
| 查询组信息 | ADFind -b "OU=Groups,DC=example,DC=com" -f "(cn=HR Group)" |
Get-ADGroup -Identity "HR Group" |
| 添加用户到组 | ADFind -b "OU=Groups,DC=example,DC=com" -f "(cn=HR Group)" -add "member=johndoe" |
Add-ADGroupMember -Identity "HR Group" -Members "johndoe" |
| 从组中移除用户 | ADFind -b "OU=Groups,DC=example,DC=com" -f "(cn=HR Group)" -remove "member=johndoe" |
Remove-ADGroupMember -Identity "HR Group" -Members "johndoe" |
| 计算机管理 | ADFind -b "OU=Computers,DC=example,DC=com" -f "(objectClass=computer)" |
Get-ADComputer -Filter * -SearchBase "OU=Computers,DC=example,DC=com" |
| 查询计算机信息 | ADFind -b "OU=Computers,DC=example,DC=com" -f "(sAMAccountName=Computer01)" |
Get-ADComputer -Identity "Computer01" -Properties * |
| 删除计算机账户 | ADFind -b "OU=Computers,DC=example,DC=com" -f "(sAMAccountName=Computer01)" -delete |
Remove-ADComputer -Identity "Computer01" |
| 组织单位管理 | ADFind -b "DC=example,DC=com" -f "(objectClass=organizationalUnit)" |
Get-ADOrganizationalUnit -Filter * |
| 查询组织单位信息 | ADFind -b "DC=example,DC=com" -f "(ou=Sales)" |
Get-ADOrganizationalUnit -Filter {Name -eq "Sales"} |
| 删除组织单位 | ADFind -b "DC=example,DC=com" -f "(ou=Sales)" -delete |
Remove-ADOrganizationalUnit -Identity "Sales" |
| 域控制器管理 | ADFind -b "DC=example,DC=com" -f "(objectClass=domainController)" |
Get-ADDomainController -Filter * |
| 查看域功能级别 | ADFind -b "DC=example,DC=com" -f "(objectClass=domain)" |
Get-ADDomain <br> Set-ADDomain -Identity "example.com" -DomainMode "Windows2012R2" |
| 信任关系管理 | ADFind -b "DC=example,DC=com" -f "(trustType=external)" |
Get-ADTrust <br> New-ADTrust -Name "example.com" -TrustType "External" -TrustDirection "Bidirectional" |
| 查看用户组成员 | ADFind -b "DC=example,DC=com" -f "(sAMAccountName=johndoe)" -attr "memberOf" |
`Get-ADUser -Identity "johndoe" |
| 查看组的成员 | ADFind -b "DC=example,DC=com" -f "(cn=HR Group)" -attr "member" |
Get-ADGroupMember -Identity "HR Group" |
| 查看用户的登录信息 | ADFind -b "DC=example,DC=com" -f "(sAMAccountName=johndoe)" -attr "lastLogonTimestamp" |
Get-ADUser -Identity "johndoe" -Properties LastLogonDate |
| 设置用户账号过期 | ADFind -b "OU=Users,DC=example,DC=com" -f "(sAMAccountName=johndoe)" -set "accountExpires=20251231" |
Set-ADUser -Identity "johndoe" -AccountExpirationDate "2025-12-31" |
说明:
ADFind是一个命令行工具,通常用于查询和操作 Active Directory 对象,支持广泛的过滤器、搜索参数和修改功能。- PowerShell 通过
Get-ADUser,Set-ADUser,Remove-ADUser等 cmdlet 提供更强的可编程性和自动化支持。
通过 ADFind 和 PowerShell cmdlet,管理员能够高效地管理 Active Directory 中的各种对象(用户、组、计算机等)。两者的功能是相似的,PowerShell 提供了更多的脚本化、自动化能力。
提供更多 ADFind 和 PowerShell cmdlet 之间的对比,涵盖一些更高级的功能和用法:
| 功能分类 | ADFind 命令 | PowerShell cmdlet 示例 |
|---|---|---|
| 查询用户的属性 | ADFind -b "OU=Users,DC=example,DC=com" -f "(sAMAccountName=johndoe)" -attr "givenName,sn,mail" |
Get-ADUser -Identity "johndoe" -Properties givenName,sn,mail |
| 查询组成员的属性 | ADFind -b "OU=Groups,DC=example,DC=com" -f "(cn=HR Group)" -attr "member" |
`Get-ADGroupMember -Identity "HR Group" |
| 批量导出用户列表 | ADFind -b "OU=Users,DC=example,DC=com" -f "(objectClass=user)" -attr "sAMAccountName,givenName,sn" > users.txt |
`Get-ADUser -Filter * -SearchBase "OU=Users,DC=example,DC=com" |
| 计算机的操作系统版本 | ADFind -b "OU=Computers,DC=example,DC=com" -f "(objectClass=computer)" -attr "operatingSystem" |
Get-ADComputer -Filter * -SearchBase "OU=Computers,DC=example,DC=com" -Properties operatingSystem |
| 查询特定 OU 下的用户 | ADFind -b "OU=Sales,DC=example,DC=com" -f "(objectClass=user)" |
Get-ADUser -Filter * -SearchBase "OU=Sales,DC=example,DC=com" |
| 查找指定用户组下的所有用户 | ADFind -b "DC=example,DC=com" -f "(memberOf=CN=HR Group,OU=Groups,DC=example,DC=com)" |
`Get-ADUser -Filter * -Properties MemberOf |
| 添加用户到多个组 | ADFind -b "OU=Users,DC=example,DC=com" -f "(sAMAccountName=johndoe)" -add "memberOf=CN=Group1,OU=Groups,DC=example,DC=com" -add "memberOf=CN=Group2,OU=Groups,DC=example,DC=com" |
Add-ADGroupMember -Identity "Group1" -Members "johndoe"; Add-ADGroupMember -Identity "Group2" -Members "johndoe" |
| 导出组织单位的列表 | ADFind -b "DC=example,DC=com" -f "(objectClass=organizationalUnit)" -attr "ou" |
`Get-ADOrganizationalUnit -Filter * |
| 获取域控制器信息 | ADFind -b "DC=example,DC=com" -f "(objectClass=domainController)" -attr "dNSHostName,operatingSystem" |
Get-ADDomainController -Filter * -Properties dNSHostName,operatingSystem |
| 通过组名称查询成员 | ADFind -b "DC=example,DC=com" -f "(cn=HR Group)" -attr "member" |
Get-ADGroupMember -Identity "HR Group" |
| 修改组描述 | ADFind -b "OU=Groups,DC=example,DC=com" -f "(cn=HR Group)" -set "description=HR Management" |
Set-ADGroup -Identity "HR Group" -Description "HR Management" |
| 查看域功能级别 | ADFind -b "DC=example,DC=com" -f "(objectClass=domain)" |
Get-ADDomain |
| 查看用户的 SID | ADFind -b "OU=Users,DC=example,DC=com" -f "(sAMAccountName=johndoe)" -attr "objectSid" |
Get-ADUser -Identity "johndoe" -Properties objectSid |
进一步说明:
-
查询和筛选功能:无论是
ADFind还是 PowerShell,都可以通过-f选项(ADFind)或-Filter(PowerShell)来进行对象的过滤。PowerShell 提供了更强大的筛选功能和更加灵活的表达式支持,能够结合多个属性进行高级查询。 -
批量操作:在进行批量用户导出、组成员查询等操作时,PowerShell 通常使用
Export-Csv、Select-Object等 cmdlet 将结果导出到文件,这对于自动化脚本和报告生成非常有用。 -
属性和信息查询:两者都支持查询对象的详细属性,但 PowerShell 更容易在脚本中使用管道(
|)将多个命令组合,实现更复杂的查询和处理,如导出用户或计算机的多个属性信息。 -
批量添加或删除成员:PowerShell 使用
Add-ADGroupMember和Remove-ADGroupMember可以批量地对组成员进行管理,而ADFind则使用-add和-remove参数来实现类似功能。 -
多功能操作:
ADFind提供了-set、-delete等操作,方便修改和删除属性。PowerShell 的Set-ADUser、Remove-ADUser等 cmdlet 则更灵活,可以通过管道和高级表达式进行更加定制化的操作。
总结:
ADFind是一个专注于命令行查询和管理 Active Directory 对象的工具,适用于快速查询和修改 AD 对象,特别适合对系统配置和网络管理有一定经验的用户。- PowerShell 作为 Windows 系统的强大自动化和脚本语言,不仅提供了与
ADFind相似的功能,还能够通过丰富的脚本编写能力、更强的管道处理和复杂操作,适用于大规模的自动化任务和 AD 管理工作。
探讨 ADFind 和 PowerShell 在 Active Directory 管理中的更多对比与应用。以下是一些更复杂的场景,以及如何使用 ADFind 和 PowerShell 完成这些任务。
1. 查看域内的所有计算机对象
ADFind 示例:
ADFind -b "DC=example,DC=com" -f "(objectClass=computer)" -attr "cn,operatingSystem"
此命令查询 example.com 域内的所有计算机对象,并列出它们的计算机名称(cn)和操作系统(operatingSystem)。
PowerShell 示例:
Get-ADComputer -Filter * -Properties cn,operatingSystem | Select-Object cn,operatingSystem
使用 PowerShell,可以通过 Get-ADComputer 获取计算机对象,并结合 Select-Object 显示指定的属性。PowerShell 还支持更复杂的筛选操作,适合大规模查询。
2. 查找并列出特定组的所有成员
ADFind 示例:
ADFind -b "DC=example,DC=com" -f "(cn=HR Group)" -attr "member"
这将查询 HR Group 组的所有成员。
PowerShell 示例:
Get-ADGroupMember -Identity "HR Group" | Select-Object Name,SamAccountName
PowerShell 通过 Get-ADGroupMember 获取组成员,支持管道操作进行进一步处理,例如列出每个成员的姓名和登录名。
3. 查找和修改用户的电子邮件地址
ADFind 示例:
ADFind -b "OU=Users,DC=example,DC=com" -f "(sAMAccountName=johndoe)" -set "mail=john.doe@example.com"
此命令通过 ADFind 设置用户 johndoe 的电子邮件地址。
PowerShell 示例:
Set-ADUser -Identity "johndoe" -EmailAddress "john.doe@example.com"
PowerShell 使用 Set-ADUser 修改用户的属性,操作简洁明了,适用于自动化和脚本任务。
4. 批量删除特定 OU 下的所有用户
ADFind 示例:
ADFind -b "OU=Employees,DC=example,DC=com" -f "(objectClass=user)" -delete
ADFind 支持批量删除符合条件的对象,在这个例子中,它会删除 Employees 组织单元下的所有用户。
PowerShell 示例:
Get-ADUser -Filter * -SearchBase "OU=Employees,DC=example,DC=com" | Remove-ADUser
PowerShell 使用管道和 Remove-ADUser cmdlet 实现批量删除用户的操作,可以通过管道将查询结果传递给 Remove-ADUser 来删除所有用户。
5. 将用户添加到多个组
ADFind 示例:
ADFind -b "OU=Users,DC=example,DC=com" -f "(sAMAccountName=johndoe)" -add "memberOf=CN=Group1,OU=Groups,DC=example,DC=com" -add "memberOf=CN=Group2,OU=Groups,DC=example,DC=com"
这个命令会将用户 johndoe 同时添加到 Group1 和 Group2。
PowerShell 示例:
Add-ADGroupMember -Identity "Group1" -Members "johndoe"
Add-ADGroupMember -Identity "Group2" -Members "johndoe"
PowerShell 的 Add-ADGroupMember 可以多次使用来添加用户到不同的组,语法清晰易懂。
6. 查询并导出所有用户的密码策略
ADFind 示例:
ADFind -b "DC=example,DC=com" -f "(objectClass=user)" -attr "sAMAccountName, pwdLastSet"
这个命令会查询所有用户并返回他们的登录名(sAMAccountName)和密码最后修改时间(pwdLastSet)。
PowerShell 示例:
Get-ADUser -Filter * -Properties sAMAccountName,pwdLastSet | Select-Object sAMAccountName,pwdLastSet | Export-Csv "users_password_policy.csv" -NoTypeInformation
PowerShell 支持将查询结果导出为 CSV 文件,非常适合报告和备份操作。
7. 检测并修复域控制器的复制问题
ADFind 示例:
ADFind -b "DC=example,DC=com" -f "(objectClass=domainController)" -attr "dNSHostName, replication"
查询所有域控制器的 DNS 名称和复制信息。
PowerShell 示例:
Get-ADDomainController -Filter * -Properties dNSHostName,Replication
PowerShell 也能通过 Get-ADDomainController 获取域控制器的复制状态,使用管道处理后可以方便地进行修复或监控。
8. 查询并列出所有组织单位 (OU)
ADFind 示例:
ADFind -b "DC=example,DC=com" -f "(objectClass=organizationalUnit)" -attr "ou"
列出所有组织单位。
PowerShell 示例:
Get-ADOrganizationalUnit -Filter * | Select-Object Name
PowerShell 的 Get-ADOrganizationalUnit cmdlet 简单易用,查询结果也能通过 Select-Object 进一步筛选。
9. 设置用户属性 (如职务、电话号码等)
ADFind 示例:
ADFind -b "OU=Users,DC=example,DC=com" -f "(sAMAccountName=johndoe)" -set "title=Manager" -set "telephoneNumber=1234567890"
在这个示例中,ADFind 用于修改用户的职务和电话号码。
PowerShell 示例:
Set-ADUser -Identity "johndoe" -Title "Manager" -OfficePhone "1234567890"
PowerShell 通过 Set-ADUser cmdlet 更加直观地修改多个属性,支持批量操作,并能够通过脚本进行自定义设置。
总结:
-
ADFind是一个专门为 Active Directory 查询和管理设计的命令行工具,适用于快速操作和查询,尤其在没有 PowerShell 环境的情况下,它是一个非常有效的工具。 -
PowerShell 提供了更强大、更灵活的自动化能力,它的 cmdlet 不仅能实现类似的功能,还能将多种命令结合使用,通过管道和条件表达式进行复杂的数据处理和批量操作,尤其适合大规模管理任务。
对于日常的 AD 管理,PowerShell 的优势在于其脚本化能力和扩展性,而 ADFind 则更适合简单、快速的查询。如果你希望执行更多自动化和复杂任务,PowerShell 可能是更好的选择。
深入探讨 ADFind 和 PowerShell 在 Active Directory 管理中的应用,尤其是在一些更复杂或具体的管理任务中。下面我会列出更多的使用场景,以及如何使用这两者来完成这些任务。
10. 查找并列出最近登录的用户
ADFind 示例:
ADFind -b "DC=example,DC=com" -f "(objectClass=user)" -attr "sAMAccountName,lastLogon"
此命令将列出所有用户的登录名以及最近一次登录时间。
PowerShell 示例:
Get-ADUser -Filter * -Properties sAMAccountName,lastLogonDate | Select-Object sAMAccountName,lastLogonDate
PowerShell 使用 lastLogonDate 属性,结合 Select-Object 来显示登录名和最后登录时间。这种方式会更加直观和易于后续处理。
11. 查看并修改组的描述
ADFind 示例:
ADFind -b "DC=example,DC=com" -f "(cn=HR Group)" -set "description=Human Resources"
通过 ADFind 可以直接修改组的描述。
PowerShell 示例:
Set-ADGroup -Identity "HR Group" -Description "Human Resources"
PowerShell 使用 Set-ADGroup 可以修改组的描述。通过 -Description 参数,你可以非常轻松地为组添加或修改描述。
12. 列出所有组织单元 (OU) 中的用户
ADFind 示例:
ADFind -b "OU=Employees,DC=example,DC=com" -f "(objectClass=user)" -attr "cn,sAMAccountName"
这将列出 Employees 组织单元中所有用户的用户名和账号名。
PowerShell 示例:
Get-ADUser -Filter * -SearchBase "OU=Employees,DC=example,DC=com" | Select-Object Name,sAMAccountName
PowerShell 使用 -SearchBase 参数来指定特定的组织单元,这样可以高效地查询某个特定 OU 中的所有用户。
13. 查找并列出组中的所有成员,并导出为 CSV 文件
ADFind 示例:
ADFind -b "DC=example,DC=com" -f "(cn=Sales)" -attr "member" > sales_group_members.txt
这个命令将 Sales 组中的成员列出,并将输出保存到一个文本文件中。
PowerShell 示例:
Get-ADGroupMember -Identity "Sales" | Select-Object Name,sAMAccountName | Export-Csv "sales_group_members.csv" -NoTypeInformation
PowerShell 提供了 Export-Csv 命令,允许将查询结果直接导出为 CSV 格式,非常适合生成报告或进行进一步分析。
14. 查找并删除未活动的用户
ADFind 示例:
ADFind -b "DC=example,DC=com" -f "(lastLogonTimestamp<=20191231000000)" -delete
此命令将删除在 2019 年 12 月 31 日之前没有登录的用户。
PowerShell 示例:
Get-ADUser -Filter {lastLogonTimestamp -lt (Get-Date).AddYears(-1)} | Remove-ADUser
PowerShell 的 Get-ADUser 配合 lastLogonTimestamp 可以灵活地筛选出未登录超过一年或其他时间范围的用户,并使用 Remove-ADUser 进行删除操作。
15. 查看和修改用户的密码永不过期设置
ADFind 示例:
ADFind -b "OU=Users,DC=example,DC=com" -f "(sAMAccountName=johndoe)" -set "userAccountControl=512"
通过这个命令,可以将 johndoe 用户的密码设置为永不过期。userAccountControl=512 代表常规的用户账户,而修改为其他值可以实现不同的账户属性修改。
PowerShell 示例:
Set-ADUser -Identity "johndoe" -PasswordNeverExpires $true
PowerShell 使用 Set-ADUser 的 -PasswordNeverExpires 参数可以轻松实现该功能。该命令设置 johndoe 用户的密码永不过期。
16. 查询用户的组成员身份
ADFind 示例:
ADFind -b "DC=example,DC=com" -f "(sAMAccountName=johndoe)" -attr "memberOf"
此命令查询用户 johndoe 的所有组成员身份。
PowerShell 示例:
Get-ADUser -Identity "johndoe" -Properties memberOf | Select-Object -ExpandProperty memberOf
PowerShell 使用 -Properties memberOf 参数来获取用户所属的所有组,并通过 Select-Object -ExpandProperty 显示所有组。
17. 查看和修改用户的登录脚本路径
ADFind 示例:
ADFind -b "OU=Users,DC=example,DC=com" -f "(sAMAccountName=johndoe)" -set "scriptPath=\\Server\Scripts\logon.bat"
此命令会将用户 johndoe 的登录脚本路径设置为指定的路径。
PowerShell 示例:
Set-ADUser -Identity "johndoe" -ScriptPath "\\Server\Scripts\logon.bat"
PowerShell 通过 Set-ADUser 使用 -ScriptPath 参数来设置用户的登录脚本路径。
18. 批量启用或禁用用户账户
ADFind 示例:
ADFind -b "OU=Employees,DC=example,DC=com" -f "(enabled=FALSE)" -set "enabled=TRUE"
此命令将 Employees 组织单元中所有禁用的用户账户启用。
PowerShell 示例:
Get-ADUser -Filter {Enabled -eq $false} -SearchBase "OU=Employees,DC=example,DC=com" | Enable-ADAccount
PowerShell 使用 Get-ADUser 获取所有禁用的用户并使用 Enable-ADAccount 进行批量启用。
19. 查询域内所有域控制器的状态
ADFind 示例:
ADFind -b "DC=example,DC=com" -f "(objectClass=domainController)" -attr "dNSHostName"
该命令列出所有域控制器的 DNS 主机名。
PowerShell 示例:
Get-ADDomainController -Filter * | Select-Object dNSHostName
PowerShell 通过 Get-ADDomainController 可以获取并显示所有域控制器的 DNS 主机名。
20. 生成 Active Directory 用户的完整报告并导出为 CSV
ADFind 示例:
ADFind -b "DC=example,DC=com" -f "(objectClass=user)" -attr "cn,sAMAccountName,mail,telephoneNumber" > users_report.txt
ADFind 可以将所有用户的详细信息导出到文本文件中。
PowerShell 示例:
Get-ADUser -Filter * -Properties cn,sAMAccountName,mail,telephoneNumber | Select-Object cn,sAMAccountName,mail,telephoneNumber | Export-Csv "users_report.csv" -NoTypeInformation
PowerShell 可以通过 Export-Csv 将所有用户的详细信息导出为 CSV 格式,适合用于生成报告或进行进一步的数据处理。
总结:
ADFind 和 PowerShell 在 Active Directory 管理中的功能非常相似,但有各自的优势和适用场景:
-
ADFind:适合快速查询和操作,尤其在没有 PowerShell 环境或不需要复杂脚本的情况下非常有用。它的命令行操作非常简洁,适合对命令行熟悉的管理员进行快速操作。 -
PowerShell:更强大、更灵活,能够处理复杂的脚本任务,支持批量处理和复杂的管道操作。它在自动化和管理大量用户、组、计算机等对象时,优势尤为明显。
在实际的环境中,PowerShell 通常是首选工具,尤其在涉及到自动化、批量处理以及复杂管理任务时,而 ADFind 则是一个轻量级的备选方案,适合进行快速、直接的查询和修改操作。
探讨更多使用 ADFind 和 PowerShell 来管理 Active Directory 的技巧和最佳实践。这些方法可以帮助你在日常管理任务中提高效率和精度。
21. 查询特定组的成员并进行详细筛选
ADFind 示例:
ADFind -b "DC=example,DC=com" -f "(cn=Sales)" -attr "member" -limit 100
该命令会查询名为 Sales 的组,并列出其成员。通过 -limit 参数限制查询结果数量。
PowerShell 示例:
Get-ADGroupMember -Identity "Sales" | Where-Object { $_.objectClass -eq "user" } | Select-Object Name,sAMAccountName
PowerShell 通过 Get-ADGroupMember 获取 Sales 组成员,并使用 Where-Object 筛选出用户类型的成员。Select-Object 可以进一步选择需要显示的属性。
22. 批量重置多个用户的密码
ADFind 示例:
ADFind -b "DC=example,DC=com" -f "(objectClass=user)" -set "userPassword=NewPassword123"
通过此命令,可以将所有用户的密码设置为 NewPassword123。
PowerShell 示例:
Get-ADUser -Filter * | ForEach-Object { Set-ADAccountPassword -Identity $_ -NewPassword (ConvertTo-SecureString "NewPassword123" -AsPlainText -Force) -Reset }
PowerShell 的 ForEach-Object 使得批量重置密码变得更加灵活,并且通过 ConvertTo-SecureString 来处理密码的安全性。
23. 查看并修改计算机账户的属性
ADFind 示例:
ADFind -b "DC=example,DC=com" -f "(objectClass=computer)" -attr "name,operatingSystem" -set "operatingSystem=Windows Server 2022"
此命令查询所有计算机账户,并修改其操作系统属性为 Windows Server 2022。
PowerShell 示例:
Get-ADComputer -Filter * -Properties operatingSystem | Set-ADComputer -OperatingSystem "Windows Server 2022"
PowerShell 使用 Set-ADComputer 可以批量修改计算机账户的操作系统属性。
24. 批量添加用户到多个组
ADFind 示例:
ADFind -b "DC=example,DC=com" -f "(sAMAccountName=johndoe)" -set "memberOf=CN=Sales,OU=Groups,DC=example,DC=com;CN=Marketing,OU=Groups,DC=example,DC=com"
这个命令将用户 johndoe 添加到 Sales 和 Marketing 两个组中。
PowerShell 示例:
Add-ADGroupMember -Identity "Sales" -Members "johndoe"
Add-ADGroupMember -Identity "Marketing" -Members "johndoe"
PowerShell 使用 Add-ADGroupMember 命令将 johndoe 添加到 Sales 和 Marketing 两个组。
25. 查看并设置用户的帐户启用/禁用状态
ADFind 示例:
ADFind -b "DC=example,DC=com" -f "(sAMAccountName=johndoe)" -attr "userAccountControl"
该命令查询 johndoe 用户的 userAccountControl 属性,用于判断账户是否被禁用。
PowerShell 示例:
Get-ADUser -Identity "johndoe" | Select-Object Name,Enabled
PowerShell 使用 Enabled 属性直接显示用户账户是否启用。如果需要修改账户状态,可以使用 Enable-ADAccount 或 Disable-ADAccount。
26. 根据属性筛选 Active Directory 用户
ADFind 示例:
ADFind -b "DC=example,DC=com" -f "(mail=*@example.com)" -attr "cn,sAMAccountName"
此命令查询所有使用 @example.com 邮箱域名的用户,并列出其姓名和账号名。
PowerShell 示例:
Get-ADUser -Filter {mail -like "*@example.com"} | Select-Object Name,sAMAccountName
PowerShell 使用 -like 来进行邮箱地址的模糊匹配,并列出匹配条件的用户信息。
27. 查询 Active Directory 中的所有 OU (组织单元)
ADFind 示例:
ADFind -b "DC=example,DC=com" -f "(objectClass=organizationalUnit)" -attr "dn"
此命令列出 Active Directory 中的所有组织单元的 Distinguished Name(DN)。
PowerShell 示例:
Get-ADOrganizationalUnit -Filter * | Select-Object DistinguishedName
PowerShell 使用 Get-ADOrganizationalUnit 命令列出所有组织单元的 DN 信息,Select-Object 用于筛选出所需的属性。
28. 列出所有计算机账户及其操作系统信息
ADFind 示例:
ADFind -b "DC=example,DC=com" -f "(objectClass=computer)" -attr "name,operatingSystem"
此命令列出所有计算机账户的名称和操作系统属性。
PowerShell 示例:
Get-ADComputer -Filter * -Properties operatingSystem | Select-Object Name,operatingSystem
PowerShell 使用 Get-ADComputer 获取所有计算机账户及其操作系统信息,并通过 Select-Object 进行展示。
29. 根据特定时间范围查找修改过的用户账户
ADFind 示例:
ADFind -b "DC=example,DC=com" -f "(whenChanged>=2023-01-01)" -attr "cn,sAMAccountName,whenChanged"
此命令查询在指定时间后(例如 2023 年 1 月 1 日)被修改的用户账户。
PowerShell 示例:
Get-ADUser -Filter {whenChanged -gt "2023-01-01"} | Select-Object Name,sAMAccountName,whenChanged
PowerShell 使用 whenChanged 属性筛选出在指定日期后修改的用户账户。
30. 查询并修改计算机账户的 DNS 名称
ADFind 示例:
ADFind -b "DC=example,DC=com" -f "(objectClass=computer)" -set "dNSHostName=NewComputerName.example.com"
该命令修改所有计算机账户的 DNS 名称。
PowerShell 示例:
Set-ADComputer -Identity "ComputerName" -DNSHostName "NewComputerName.example.com"
PowerShell 使用 Set-ADComputer 命令来设置计算机账户的 DNS 主机名。
总结与最佳实践:
-
使用
ADFind的优势:ADFind提供了一个简洁快速的方式,适合在不需要复杂脚本的环境下进行快速查询和修改。特别适合没有 PowerShell 环境或没有编写复杂脚本需求的场景。 -
使用 PowerShell 的优势:PowerShell 提供了更强大的脚本化支持,适合进行复杂的自动化任务和批量操作。特别是在需要处理大量数据或结合其他系统进行集成时,PowerShell 的管道处理能力和丰富的模块支持使其更具优势。
-
自动化任务:如果你经常需要执行重复性任务或批量操作,PowerShell 的自动化功能非常适合用于管理复杂的 Active Directory 环境。例如,批量重置密码、添加用户到多个组等任务,PowerShell 提供了更高效的执行方式。
-
安全性:无论使用
ADFind还是 PowerShell,都需要注意数据的安全性和操作权限。确保你拥有适当的权限,并在执行修改操作时小心谨慎。
通过将 ADFind 和 PowerShell 的优势结合使用,可以实现更加高效和灵活的 Active Directory 管理。
深入 Active Directory 管理,我们可以进一步探讨更多有用的 ADFind 和 PowerShell 命令来提升你在环境中的管理效率。以下是一些更复杂的场景和最佳实践:
31. 查看所有用户的最后登录时间
ADFind 示例:
ADFind -b "DC=example,DC=com" -f "(objectClass=user)" -attr "cn,lastLogonTimestamp"
此命令查询所有用户的 lastLogonTimestamp 属性。lastLogonTimestamp 是用户上次成功登录的时间,通常在域控制器之间复制。
PowerShell 示例:
Get-ADUser -Filter * -Properties lastLogonTimestamp | Select-Object Name, @{Name="LastLogon";Expression={[datetime]::FromFileTime($_.lastLogonTimestamp)}}
PowerShell 的 lastLogonTimestamp 属性存储为文件时间戳,FromFileTime 将其转换为易于理解的日期和时间格式。
32. 查看组内的所有成员及其详细信息
ADFind 示例:
ADFind -b "CN=Sales,OU=Groups,DC=example,DC=com" -f "(objectClass=user)" -attr "cn,sAMAccountName,memberOf"
这个命令将查询 Sales 组中的所有成员,并列出他们的姓名、账号名和所在组的详细信息。
PowerShell 示例:
Get-ADGroupMember -Identity "Sales" | Get-ADUser -Properties memberOf | Select-Object Name,sAMAccountName,memberOf
PowerShell 可以更精确地列出每个成员的组信息,使用 Get-ADUser 提供更多的用户属性。
33. 批量启用或禁用用户账户
ADFind 示例:
ADFind -b "DC=example,DC=com" -f "(sAMAccountName=johndoe)" -set "userAccountControl=512"
此命令将 johndoe 用户账户启用。userAccountControl 属性的 512 值表示账户已启用。
PowerShell 示例:
Get-ADUser -Filter * | ForEach-Object { Enable-ADAccount -Identity $_ }
这段 PowerShell 脚本可以启用所有用户账户。使用 Disable-ADAccount 可以实现禁用。
34. 按用户的账号名查询并修改其邮箱地址
ADFind 示例:
ADFind -b "DC=example,DC=com" -f "(sAMAccountName=johndoe)" -set "mail=johndoe@example.com"
这个命令将用户 johndoe 的邮箱地址修改为 johndoe@example.com。
PowerShell 示例:
Set-ADUser -Identity "johndoe" -EmailAddress "johndoe@example.com"
PowerShell 提供了更简洁的命令来修改用户的邮箱地址。
35. 查询 Active Directory 中的所有安全组
ADFind 示例:
ADFind -b "DC=example,DC=com" -f "(groupType=-2147483646)" -attr "cn,sAMAccountName"
此命令查询所有的安全组。groupType=-2147483646 表示安全组类型。
PowerShell 示例:
Get-ADGroup -Filter {GroupScope -eq "Global" -or GroupScope -eq "Universal" -or GroupScope -eq "DomainLocal"} | Select-Object Name,sAMAccountName
PowerShell 使用 GroupScope 来筛选不同类型的安全组。
36. 查询用户是否属于某个组
ADFind 示例:
ADFind -b "DC=example,DC=com" -f "(memberOf=CN=Sales,OU=Groups,DC=example,DC=com)" -attr "cn,sAMAccountName"
此命令查询属于 Sales 组的用户。
PowerShell 示例:
Get-ADUser -Filter {MemberOf -like "*Sales*"} | Select-Object Name,sAMAccountName
PowerShell 可以使用 MemberOf 属性过滤出属于指定组的用户。
37. 查看计算机的最后登录时间
ADFind 示例:
ADFind -b "DC=example,DC=com" -f "(objectClass=computer)" -attr "cn,lastLogonTimestamp"
此命令列出计算机账户的 lastLogonTimestamp 属性,用于查看计算机的最后登录时间。
PowerShell 示例:
Get-ADComputer -Filter * -Properties lastLogonTimestamp | Select-Object Name, @{Name="LastLogon";Expression={[datetime]::FromFileTime($_.lastLogonTimestamp)}}
PowerShell 同样可以将 lastLogonTimestamp 转换为易读的日期格式,帮助管理员了解计算机的活跃情况。
38. 将计算机添加到域
ADFind 示例:
ADFind -b "CN=Computers,DC=example,DC=com" -f "(objectClass=computer)" -set "userAccountControl=4096"
此命令会将计算机账户的 userAccountControl 属性设置为 4096,表示计算机账户已加入域。
PowerShell 示例:
Add-Computer -DomainName "example.com" -Credential (Get-Credential) -Restart
PowerShell 使用 Add-Computer 可以将计算机加入到指定域,支持自动重启。
39. 查看特定 OU 中的所有对象(用户/计算机)
ADFind 示例:
ADFind -b "OU=Sales,DC=example,DC=com" -f "(objectClass=*)" -attr "cn"
此命令查询 Sales 组织单元(OU)中的所有对象,列出它们的名称。
PowerShell 示例:
Get-ADObject -Filter * -SearchBase "OU=Sales,DC=example,DC=com" | Select-Object Name
PowerShell 可以更精确地控制查询结果,使用 -SearchBase 定义组织单元。
40. 获取所有管理员组及其成员
ADFind 示例:
ADFind -b "DC=example,DC=com" -f "(name=Admin*)" -attr "cn,member"
此命令查询所有名称以 Admin 开头的组及其成员。
PowerShell 示例:
Get-ADGroup -Filter {Name -like "Admin*"} | Get-ADGroupMember | Select-Object Name,sAMAccountName
PowerShell 使用 Get-ADGroupMember 获取管理员组的成员,并列出其账号信息。
总结与扩展:
通过掌握这些 ADFind 和 PowerShell 的命令,你可以高效地管理 Active Directory 环境中的各种对象和属性。这些方法对于日常的用户管理、组管理、计算机管理等任务非常有用。如果你希望将这些命令结合到更大的自动化脚本中,PowerShell 提供了非常强大的支持。
关键点:
- 自动化:使用 PowerShell 脚本可以大大减少手动操作,尤其是当需要执行批量操作时。
- 灵活性:PowerShell 可以结合条件语句、管道等强大功能,满足更复杂的管理需求。
- 效率:
ADFind适合快速查询,尤其在小规模环境或临时任务中十分有效。
深入 Active Directory 的管理,下面我将为你展示更多复杂场景下的 ADFind 和 PowerShell 命令,帮助你提高管理效率:
41. 批量重置多个用户的密码
ADFind 示例:
ADFind -b "DC=example,DC=com" -f "(sAMAccountName=johndoe*)" -set "userPassword=newpassword"
此命令会批量重置所有以 johndoe 开头的用户密码。
PowerShell 示例:
Get-ADUser -Filter {sAMAccountName -like "johndoe*"} | Set-ADAccountPassword -NewPassword (ConvertTo-SecureString "newpassword" -AsPlainText -Force)
PowerShell 更加灵活地处理批量重置密码,使用 ConvertTo-SecureString 以安全的方式处理密码。
42. 删除过期的计算机账户
ADFind 示例:
ADFind -b "DC=example,DC=com" -f "(objectClass=computer)" -attr "lastLogonTimestamp" -time "365"
此命令查询超过 365 天未登录的计算机账户,并根据输出进行删除操作。
PowerShell 示例:
Get-ADComputer -Filter {lastLogonTimestamp -lt (Get-Date).AddDays(-365)} | Remove-ADComputer -Confirm:$false
PowerShell 使用 Get-ADComputer 结合 lastLogonTimestamp 来筛选并删除过期的计算机账户。
43. 创建一个新的组并将用户添加到该组
ADFind 示例:
ADFind -b "DC=example,DC=com" -f "(objectClass=group)" -set "cn=NewGroup,groupType=-2147483646"
此命令创建一个名为 NewGroup 的安全组。
PowerShell 示例:
New-ADGroup -Name "NewGroup" -GroupScope Global -Path "OU=Groups,DC=example,DC=com"
Add-ADGroupMember -Identity "NewGroup" -Members "johndoe", "janedoe"
PowerShell 可以创建新组并直接将用户添加到该组。
44. 查看所有组的成员及其权限
ADFind 示例:
ADFind -b "DC=example,DC=com" -f "(objectClass=group)" -attr "cn,memberOf"
此命令查询所有组并列出每个组的成员信息。
PowerShell 示例:
Get-ADGroup -Filter * | ForEach-Object { Get-ADGroupMember -Identity $_.Name | Select-Object Name, sAMAccountName }
PowerShell 可以在同一命令中获取组成员的详细信息,更灵活地处理复杂的查询需求。
45. 列出所有未启用的用户账户
ADFind 示例:
ADFind -b "DC=example,DC=com" -f "(userAccountControl:1.2.840.113556.1.4.803:=2)" -attr "cn,sAMAccountName"
此命令列出所有未启用的用户账户。userAccountControl 中的标志 2 表示账户已禁用。
PowerShell 示例:
Get-ADUser -Filter {Enabled -eq $false} | Select-Object Name, sAMAccountName
PowerShell 更加简洁,使用 Enabled 属性过滤出所有禁用的账户。
46. 查询某一OU下的所有用户及其组成员身份
ADFind 示例:
ADFind -b "OU=Sales,DC=example,DC=com" -f "(objectClass=user)" -attr "cn,sAMAccountName,memberOf"
此命令查询 Sales 组织单元中的所有用户及其组成员身份。
PowerShell 示例:
Get-ADUser -Filter * -SearchBase "OU=Sales,DC=example,DC=com" | Select-Object Name, sAMAccountName, @{Name="MemberOf";Expression={(Get-ADUser $_.DistinguishedName -Properties memberOf).memberOf}}
PowerShell 中,可以通过 Get-ADUser 查询 OU 下的用户,并通过 memberOf 属性获取用户所属的组。
47. 查询指定日期范围内创建的用户账户
ADFind 示例:
ADFind -b "DC=example,DC=com" -f "(objectClass=user)" -attr "cn,whenCreated" -time "2024-01-01" "2024-12-31"
此命令查询在 2024 年创建的所有用户账户。
PowerShell 示例:
Get-ADUser -Filter {whenCreated -ge "2024-01-01" -and whenCreated -le "2024-12-31"} | Select-Object Name, whenCreated
PowerShell 可以更容易地处理日期范围,并且能够返回指定时间段内创建的用户账户。
48. 查看所有用户的最近一次密码更改日期
ADFind 示例:
ADFind -b "DC=example,DC=com" -f "(objectClass=user)" -attr "cn,pwdLastSet"
此命令查询所有用户的 pwdLastSet 属性,表示密码的最后一次设置时间。
PowerShell 示例:
Get-ADUser -Filter * -Properties pwdLastSet | Select-Object Name, @{Name="LastPasswordSet";Expression={[datetime]::FromFileTime($_.pwdLastSet)}}
PowerShell 结合 pwdLastSet 属性将密码的最后修改时间转换为易读格式。
49. 批量删除多个组成员
ADFind 示例:
ADFind -b "DC=example,DC=com" -f "(objectClass=group)" -attr "member" -set "remove"
此命令删除指定组中的所有成员。
PowerShell 示例:
Get-ADGroupMember -Identity "Sales" | ForEach-Object { Remove-ADGroupMember -Identity "Sales" -Member $_ -Confirm:$false }
PowerShell 让批量删除操作更加精细化,逐一删除组中的成员。
50. 执行 Active Directory 中的健康检查
PowerShell 示例:
Get-ADDomainController -Filter * | Test-ADDomainControllerHealth
PowerShell 提供了一个强大的健康检查功能,可以测试域控制器的状态,包括网络、复制等情况。
总结与扩展:
通过这些示例,你可以更深入地管理和维护 Active Directory 环境中的各类对象。这些命令不仅限于用户和组的管理,还涵盖了计算机、密码、登录、OU、日期过滤等方面,帮助你快速定位和解决潜在问题。
关键点:
- 灵活的查询和批量操作:通过 PowerShell 可以轻松处理复杂的查询和批量操作,适用于不同规模的环境。
- 自动化任务:这些命令适合用在脚本中,以便自动化执行日常维护工作,节省时间和精力。
- 健康检查和报告:使用 PowerShell 提供的工具,可以定期执行健康检查和生成报告,确保 Active Directory 环境的稳定性。
深入探讨更多复杂的 ADFind 和 PowerShell 命令,这些可以帮助你更高效地进行 Active Directory 管理,尤其是在大型企业环境中。
51. 查看某一组中所有的直接成员及其嵌套组成员
ADFind 示例:
ADFind -b "DC=example,DC=com" -f "(cn=Sales)" -attr "member"
此命令列出名为 Sales 的组中的所有直接成员。
PowerShell 示例:
Get-ADGroupMember -Identity "Sales" | ForEach-Object {
$_.Name
if ($_.objectClass -eq "group") {
Get-ADGroupMember -Identity $_.Name | Select-Object Name
}
}
PowerShell 允许我们递归地获取一个组中所有成员,并可以查看嵌套组的成员。
52. 将用户从多个组中移除
ADFind 示例:
ADFind -b "DC=example,DC=com" -f "(objectClass=group)" -attr "member" -set "remove"
此命令删除某个用户从多个组中的成员身份。
PowerShell 示例:
$groups = Get-ADUser -Identity "johndoe" | Get-ADUserMembership
foreach ($group in $groups) {
Remove-ADGroupMember -Identity $group -Member "johndoe" -Confirm:$false
}
PowerShell 提供更为灵活的方式,能自动提取用户所有的组成员身份,并逐个将其移除。
53. 批量启用或禁用多个用户账户
ADFind 示例:
ADFind -b "DC=example,DC=com" -f "(sAMAccountName=johndoe*)" -set "userAccountControl:1.2.840.113556.1.4.803:=2"
此命令禁用以 johndoe 开头的所有用户账户。
PowerShell 示例:
Get-ADUser -Filter {sAMAccountName -like "johndoe*"} | Set-ADUser -Enabled $false
PowerShell 可以在几行代码内完成批量启用或禁用用户操作,非常高效。
54. 查看所有组织单位(OU)及其子组织单位
ADFind 示例:
ADFind -b "DC=example,DC=com" -f "(objectClass=organizationalUnit)" -attr "cn"
此命令列出所有组织单位(OU)的名称。
PowerShell 示例:
Get-ADOrganizationalUnit -Filter * | Select-Object Name, DistinguishedName
PowerShell 提供了更加直观的方式来列出 OU,并能够显示 OU 的完整路径。
55. 获取并导出 Active Directory 用户列表到 CSV 文件
ADFind 示例:
ADFind -b "DC=example,DC=com" -f "(objectClass=user)" -attr "cn,sAMAccountName" > users.csv
此命令将所有用户的 cn 和 sAMAccountName 属性导出到 users.csv 文件。
PowerShell 示例:
Get-ADUser -Filter * -Properties cn, sAMAccountName | Select-Object cn, sAMAccountName | Export-Csv -Path "C:\Users\userlist.csv" -NoTypeInformation
PowerShell 的 Export-Csv 命令非常适合导出信息,支持多种格式的输出。
56. 查找特定 OU 下的所有计算机和服务器
ADFind 示例:
ADFind -b "OU=Servers,DC=example,DC=com" -f "(objectClass=computer)" -attr "cn,operatingSystem"
此命令查询 Servers OU 下所有计算机的名称及操作系统信息。
PowerShell 示例:
Get-ADComputer -Filter * -SearchBase "OU=Servers,DC=example,DC=com" | Select-Object Name, OperatingSystem
PowerShell 让你通过 Select-Object 轻松筛选你所需的属性,并且支持对输出进行格式化。
57. 查找没有邮箱的用户账户
ADFind 示例:
ADFind -b "DC=example,DC=com" -f "(&(objectClass=user)(!(mail=*)))" -attr "cn,sAMAccountName"
此命令查询所有没有设置邮箱地址的用户。
PowerShell 示例:
Get-ADUser -Filter {mail -notlike "*"} | Select-Object Name, sAMAccountName
PowerShell 的 -notlike 条件让查找没有邮箱的用户变得非常直观。
58. 查看域控制器的全局组成员
ADFind 示例:
ADFind -b "DC=example,DC=com" -f "(objectClass=group)" -attr "member"
此命令列出所有组的成员。
PowerShell 示例:
Get-ADGroup -Filter {GroupScope -eq "Global"} | ForEach-Object {
Get-ADGroupMember -Identity $_.Name | Select-Object Name, sAMAccountName
}
PowerShell 可以灵活地筛选全局组,并列出这些组中的成员。
59. 执行 AD 账户锁定的故障排除
ADFind 示例:
ADFind -b "DC=example,DC=com" -f "(lockoutTime>=1)" -attr "cn,sAMAccountName,lockoutTime"
此命令列出所有被锁定的账户,并显示锁定时间。
PowerShell 示例:
Get-ADUser -Filter {lockoutTime -gt 0} | Select-Object Name, sAMAccountName, @{Name="LockoutTime";Expression={[datetime]::FromFileTime($_.lockoutTime)}}
PowerShell 提供了更灵活的方式,可以将锁定时间转换为可读格式。
60. 查找所有未启用的计算机账户
ADFind 示例:
ADFind -b "DC=example,DC=com" -f "(objectClass=computer)" -attr "cn,userAccountControl" -value "userAccountControl:1.2.840.113556.1.4.803:=2"
此命令查询所有未启用的计算机账户。
PowerShell 示例:
Get-ADComputer -Filter {Enabled -eq $false} | Select-Object Name, sAMAccountName
PowerShell 通过 Enabled 属性过滤出禁用的计算机账户,快速找出问题。
总结:
这些命令涵盖了更多高级的 Active Directory 管理操作,包括组管理、OU 筛选、计算机账户、健康检查等。在执行这些操作时,PowerShell 提供了比 ADFind 更强的灵活性,特别是在处理复杂的逻辑和批量任务时。
关键技巧:
- 批量操作:PowerShell 在批量操作和自动化管理方面有明显优势,可以通过管道操作和脚本完成更多复杂的任务。
- 导出与报表:PowerShell 支持多种数据导出格式,尤其是
Export-Csv命令,适合生成详细的报表。 - 条件查询:无论是
ADFind还是 PowerShell,都可以根据不同的条件灵活筛选对象,比如按时间、属性或状态筛选。
深入探讨更多与 Active Directory(AD)管理相关的命令,涉及更复杂的情景和高级操作:
61. 查找并报告 AD 中所有的过期账户
ADFind 示例:
ADFind -b "DC=example,DC=com" -f "(pwdLastSet<=1)" -attr "cn,sAMAccountName,pwdLastSet"
此命令查找所有密码设置时间较长的用户账户,通常这些账户可能已经过期或不再使用。
PowerShell 示例:
Get-ADUser -Filter {pwdLastSet -lt (Get-Date).AddYears(-1).ToFileTime()} | Select-Object Name, sAMAccountName, @{Name="LastPasswordSet";Expression={[datetime]::FromFileTime($_.pwdLastSet)}}
PowerShell 使用日期操作来查找超过一年没有修改密码的账户,并将 pwdLastSet 转换为易读格式。
62. 检查哪些用户启用了多重身份验证(MFA)
ADFind 示例:
ADFind -b "DC=example,DC=com" -f "(msExchRecipientTypeDetails=4)" -attr "cn,sAMAccountName"
此命令查找启用了多重身份验证的用户。这个属性可能因不同的设置而有所不同。
PowerShell 示例:
Get-ADUser -Filter * | Where-Object { $_.ExtensionData -like "*mfa*" } | Select-Object Name, sAMAccountName
PowerShell 允许你通过扩展属性或者 MFA 配置来筛选启用多重身份验证的账户。
63. 查找属于特定组的用户,并检查他们的邮箱
ADFind 示例:
ADFind -b "DC=example,DC=com" -f "(cn=Sales)" -attr "member" | xargs -I {} ADFind -b "DC=example,DC=com" -f "(sAMAccountName={})" -attr "mail"
此命令首先列出属于 Sales 组的成员,然后查看每个用户的邮箱。
PowerShell 示例:
$groupMembers = Get-ADGroupMember -Identity "Sales" | Select-Object -ExpandProperty SamAccountName
foreach ($user in $groupMembers) {
Get-ADUser -Identity $user | Select-Object Name, mail
}
PowerShell 的 ForEach-Object 或 foreach 使得批量查询组成员邮箱变得简单。
64. 创建新用户并加入多个组
ADFind 示例:
ADFind -create -b "DC=example,DC=com" -f "(objectClass=user)" -attr "cn,sAMAccountName" -group "Group1,Group2"
此命令将创建新用户并将其加入到多个组。
PowerShell 示例:
New-ADUser -SamAccountName "johndoe" -Name "John Doe" -GivenName "John" -Surname "Doe" -UserPrincipalName "johndoe@example.com" -AccountPassword (ConvertTo-SecureString -String "P@ssw0rd" -AsPlainText -Force) -Enabled $true
Add-ADGroupMember -Identity "Group1" -Members "johndoe"
Add-ADGroupMember -Identity "Group2" -Members "johndoe"
PowerShell 的 New-ADUser 和 Add-ADGroupMember 命令可以轻松实现批量操作,创建用户并加入多个组。
65. 查找所有没有组成员的空组
ADFind 示例:
ADFind -b "DC=example,DC=com" -f "(objectClass=group)" -attr "cn,member" | grep -L "member"
此命令列出所有没有成员的空组。
PowerShell 示例:
Get-ADGroup -Filter * | Where-Object { (Get-ADGroupMember -Identity $_.DistinguishedName).Count -eq 0 } | Select-Object Name
PowerShell 通过 Get-ADGroupMember 可以很容易地筛选出没有成员的空组。
66. 批量重置用户密码
ADFind 示例:
ADFind -b "DC=example,DC=com" -f "(objectClass=user)" -attr "sAMAccountName" -set "password:NewP@ssw0rd"
此命令可以批量重置所有用户密码。
PowerShell 示例:
Get-ADUser -Filter * | Set-ADAccountPassword -NewPassword (ConvertTo-SecureString -AsPlainText "NewP@ssw0rd" -Force)
PowerShell 提供了一种简洁的方式批量重置密码,确保所有用户密码都得到更新。
67. 查找没有设置 logonScript 属性的用户
ADFind 示例:
ADFind -b "DC=example,DC=com" -f "(objectClass=user)" -attr "logonScript" -value "*"
此命令查找没有设置 logonScript 属性的用户。
PowerShell 示例:
Get-ADUser -Filter {logonScript -notlike "*"} | Select-Object Name, sAMAccountName
PowerShell 允许你通过 -notlike 筛选出没有设置登录脚本的用户。
68. 检查并修改用户的 userAccountControl 属性
ADFind 示例:
ADFind -b "DC=example,DC=com" -f "(sAMAccountName=johndoe)" -attr "userAccountControl" -set "userAccountControl:1.2.840.113556.1.4.803:=512"
此命令将用户的 userAccountControl 属性设置为 512,通常表示启用用户账户。
PowerShell 示例:
Set-ADUser -Identity "johndoe" -UserPrincipalName "johndoe@example.com" -AccountPassword (ConvertTo-SecureString -AsPlainText "P@ssw0rd" -Force) -Enabled $true
PowerShell 可以直接修改用户的 userAccountControl 属性,并管理账户状态。
69. 清理过期的计算机账户
ADFind 示例:
ADFind -b "DC=example,DC=com" -f "(objectClass=computer)" -attr "cn,whenCreated" -value "whenCreated<01/01/2024"
此命令查找并删除 2024 年 1 月 1 日之前创建的过期计算机账户。
PowerShell 示例:
Get-ADComputer -Filter {whenCreated -lt (Get-Date).AddYears(-1)} | Remove-ADComputer -Confirm:$false
PowerShell 提供更简洁的方式批量删除过期的计算机账户。
70. 报告哪些用户有未使用的邮箱
ADFind 示例:
ADFind -b "DC=example,DC=com" -f "(mail=*)" -attr "mail,lastLogonTimestamp"
此命令列出所有具有邮箱的用户,并显示他们的最后登录时间。
PowerShell 示例:
Get-ADUser -Filter {mail -like "*"} | Where-Object { $_.lastLogonTimestamp -lt (Get-Date).AddDays(-30).ToFileTime() } | Select-Object Name, mail, lastLogonTimestamp
PowerShell 可根据最后登录时间筛选出那些邮箱未被使用的用户。
总结
这些高级命令涉及到了 Active Directory 中更复杂的场景,包括密码管理、过期账户清理、多重身份验证、邮箱监控等。 PowerShell 无疑提供了更强大的功能,能够帮助管理员高效地处理批量操作、过滤和导出信息,而 ADFind 则适合简单的查询和报告生成。
建议:
- 定期维护:定期执行一些脚本来检查过期账户、空组和无效邮箱等问题。
- 自动化操作:通过 PowerShell 脚本实现自动化的用户管理、密码重置和权限检查,减少人工操作的错误。
探索更多与 Active Directory(AD)管理相关的高级命令。下面是更多的实际场景和命令,帮助你更好地掌控 AD 环境。
71. 查找被禁用的用户账户
ADFind 示例:
ADFind -b "DC=example,DC=com" -f "(userAccountControl:1.2.840.113556.1.4.803:=2)" -attr "sAMAccountName,cn,userAccountControl"
此命令将查找所有被禁用的用户账户。
PowerShell 示例:
Get-ADUser -Filter {Enabled -eq $false} | Select-Object Name, sAMAccountName
PowerShell 的 Enabled 属性非常方便,可以直接筛选出所有禁用的用户账户。
72. 查看哪些用户账户即将过期
ADFind 示例:
ADFind -b "DC=example,DC=com" -f "(whenChanged>=2025-01-01)" -attr "sAMAccountName,whenChanged"
此命令查找账户修改日期接近 2025 年 1 月 1 日的所有账户,通常这些账户接近到期或有更新。
PowerShell 示例:
Get-ADUser -Filter {accountExpires -lt (Get-Date).AddDays(30)} | Select-Object Name, accountExpires
PowerShell 可以通过 accountExpires 属性筛选即将到期的用户账户。
73. 查找没有分配邮箱的用户
ADFind 示例:
ADFind -b "DC=example,DC=com" -f "(mail=*)" -attr "sAMAccountName" | grep -L "mail"
此命令列出没有设置 mail 属性的用户账户。
PowerShell 示例:
Get-ADUser -Filter {mail -notlike "*"} | Select-Object Name, sAMAccountName
PowerShell 的 -notlike 操作符非常适合查找没有邮箱的用户。
74. 批量启用或禁用账户
ADFind 示例:
ADFind -b "DC=example,DC=com" -f "(objectClass=user)" -attr "sAMAccountName" -set "userAccountControl:1.2.840.113556.1.4.803:=512"
此命令将批量启用所有用户账户。
PowerShell 示例:
Get-ADUser -Filter * | Set-ADUser -Enabled $false # 禁用
Get-ADUser -Filter * | Set-ADUser -Enabled $true # 启用
PowerShell 简洁地通过 Set-ADUser 修改账户状态,方便批量处理。
75. 列出所有用户的登录时间
ADFind 示例:
ADFind -b "DC=example,DC=com" -f "(objectClass=user)" -attr "sAMAccountName,lastLogonTimestamp"
此命令列出所有用户的最后登录时间。
PowerShell 示例:
Get-ADUser -Filter * -Properties lastLogonTimestamp | Select-Object Name, sAMAccountName, @{Name="LastLogon";Expression={[datetime]::FromFileTime($_.lastLogonTimestamp)}}
PowerShell 允许我们通过 lastLogonTimestamp 属性获取用户的最后登录时间,并进行日期格式化。
76. 检查和报告账户锁定信息
ADFind 示例:
ADFind -b "DC=example,DC=com" -f "(lockoutTime>=1)" -attr "sAMAccountName,lockoutTime"
此命令查找被锁定的账户,并显示锁定时间。
PowerShell 示例:
Get-ADUser -Filter {LockoutTime -gt 0} | Select-Object Name, sAMAccountName, LockoutTime
PowerShell 通过 LockoutTime 属性可以轻松列出所有被锁定的账户。
77. 列出所有的管理员账户
ADFind 示例:
ADFind -b "DC=example,DC=com" -f "(memberOf=CN=Administrators,OU=Groups,DC=example,DC=com)" -attr "sAMAccountName,cn"
此命令列出所有属于 Administrators 组的用户账户。
PowerShell 示例:
Get-ADGroupMember -Identity "Administrators" | Select-Object Name, sAMAccountName
PowerShell 通过 Get-ADGroupMember 可以方便地列出组内所有成员。
78. 删除没有使用过的用户账户
ADFind 示例:
ADFind -b "DC=example,DC=com" -f "(lastLogonTimestamp<=1)" -attr "sAMAccountName,lastLogonTimestamp"
此命令查找那些从未登录过的用户账户。
PowerShell 示例:
Get-ADUser -Filter {lastLogonTimestamp -lt (Get-Date).AddYears(1).ToFileTime()} | Remove-ADUser -Confirm:$false
PowerShell 通过 lastLogonTimestamp 属性筛选出未登录过的用户,并进行批量删除。
79. 查看和修改用户的组成员身份
ADFind 示例:
ADFind -b "DC=example,DC=com" -f "(sAMAccountName=johndoe)" -attr "memberOf"
此命令列出用户 johndoe 所属的所有组。
PowerShell 示例:
Get-ADUser -Identity "johndoe" | Get-ADUserMembership | Select-Object Name
PowerShell 可以通过 Get-ADUserMembership 获取某个用户所属的所有组,并显示其组名。
80. 批量禁用不活动账户
ADFind 示例:
ADFind -b "DC=example,DC=com" -f "(lastLogonTimestamp<=2023-01-01)" -attr "sAMAccountName" -set "userAccountControl:1.2.840.113556.1.4.803:=514"
此命令禁用所有超过一定时间没有登录的账户。
PowerShell 示例:
Get-ADUser -Filter {lastLogonTimestamp -lt (Get-Date).AddMonths(-6).ToFileTime()} | Set-ADUser -Enabled $false
PowerShell 可以通过 lastLogonTimestamp 属性筛选不活跃的账户,并将它们禁用。
81. 报告特定 OU 中的用户
ADFind 示例:
ADFind -b "OU=Sales,DC=example,DC=com" -f "(objectClass=user)" -attr "cn,sAMAccountName"
此命令列出 Sales 组织单位(OU)中的所有用户。
PowerShell 示例:
Get-ADUser -Filter * -SearchBase "OU=Sales,DC=example,DC=com" | Select-Object Name, sAMAccountName
PowerShell 允许你指定搜索基准(-SearchBase)来限制查询范围,例如仅查询 Sales OU。
82. 备份和恢复 AD 配置
ADFind 示例:
ADFind -b "CN=Configuration,DC=example,DC=com" -f "(objectClass=*)"
此命令将查询整个 AD 配置部分,可以为备份做准备。
PowerShell 示例:
Export-ADSnapshot -Path "C:\ADBackup" # 备份
Restore-ADSnapshot -Path "C:\ADBackup" # 恢复
PowerShell 提供了导出和恢复 AD 快照的功能,便于在需要时进行配置恢复。
总结
这些命令进一步扩展了你在管理 AD 时可以执行的高级操作。你可以:
- 查找和管理用户状态,如禁用、锁定、过期等;
- 监控和报告账户的活动情况,如登录时间、邮箱设置等;
- 批量操作,如启用、禁用、密码重置等;
- 维护 AD 结构,如清理不活跃账户、报告特定 OU 或组内的成员等。
通过将这些命令集成到自动化脚本中,你可以大大提高管理效率,并确保 Active Directory 环境始终保持最佳状态。
深入了解更多关于 Active Directory(AD)管理的高级命令,涵盖更多场景和任务。
83. 查找密码过期的用户
ADFind 示例:
ADFind -b "DC=example,DC=com" -f "(pwdLastSet<=1)" -attr "sAMAccountName,pwdLastSet"
此命令将列出那些密码过期的用户,pwdLastSet 属性指示上次密码设置的时间。
PowerShell 示例:
Get-ADUser -Filter {pwdLastSet -lt (Get-Date).AddDays(-90).ToFileTime()} | Select-Object Name, sAMAccountName
PowerShell 通过 pwdLastSet 属性过滤出密码超过 90 天未更新的用户,可以根据具体要求调整时间。
84. 列出所有组及其成员
ADFind 示例:
ADFind -b "DC=example,DC=com" -f "(objectClass=group)" -attr "cn,member"
此命令将列出所有组及其成员。
PowerShell 示例:
Get-ADGroup -Filter * | Get-ADGroupMember | Select-Object Name, sAMAccountName
PowerShell 通过 Get-ADGroup 和 Get-ADGroupMember 组合使用,轻松列出每个组的成员。
85. 批量重置用户密码
ADFind 示例:
ADFind -b "DC=example,DC=com" -f "(objectClass=user)" -attr "sAMAccountName" -set "unicodePwd={NewPassword}"
此命令可以批量修改用户的密码。请注意,实际使用中密码必须以特定格式进行设置(加密或明文),并且要确保符合安全策略。
PowerShell 示例:
Get-ADUser -Filter * | Set-ADAccountPassword -NewPassword (ConvertTo-SecureString "NewPassword" -AsPlainText -Force) -Reset
PowerShell 的 Set-ADAccountPassword 允许批量重置用户密码,使用 ConvertTo-SecureString 转换为安全字符串。
86. 列出特定用户的组成员
ADFind 示例:
ADFind -b "DC=example,DC=com" -f "(sAMAccountName=johndoe)" -attr "memberOf"
此命令将列出用户 johndoe 所在的所有组。
PowerShell 示例:
Get-ADUser -Identity "johndoe" | Get-ADUserMembership | Select-Object Name
PowerShell 可以很方便地列出指定用户所属的所有组。
87. 查找所有没有组成员的组
ADFind 示例:
ADFind -b "DC=example,DC=com" -f "(member=*)" -attr "cn"
此命令会查找没有成员的组(即没有任何成员的组)。
PowerShell 示例:
Get-ADGroup -Filter * | Where-Object { (Get-ADGroupMember $_).Count -eq 0 } | Select-Object Name
PowerShell 通过 Where-Object 筛选出没有成员的组,并显示组名。
88. 查看用户的密码策略
ADFind 示例:
ADFind -b "DC=example,DC=com" -f "(sAMAccountName=johndoe)" -attr "pwdLastSet"
此命令会显示指定用户的密码设置时间,通过 pwdLastSet 属性来获取。
PowerShell 示例:
Get-ADUser -Identity "johndoe" -Properties "pwdLastSet" | Select-Object Name, @{Name="PasswordLastSet";Expression={[datetime]::FromFileTime($_.pwdLastSet)}}
PowerShell 通过 pwdLastSet 提供的时间戳转换为可读的日期格式。
89. 报告所有用户的账户状态
ADFind 示例:
ADFind -b "DC=example,DC=com" -f "(objectClass=user)" -attr "sAMAccountName,userAccountControl"
此命令列出所有用户账户的状态(启用/禁用)。
PowerShell 示例:
Get-ADUser -Filter * | Select-Object Name, sAMAccountName, Enabled
PowerShell 直接使用 Enabled 属性来显示用户账户是否启用。
90. 查找特定 OU 中的所有计算机
ADFind 示例:
ADFind -b "OU=Computers,DC=example,DC=com" -f "(objectClass=computer)" -attr "cn,sAMAccountName"
此命令查找 Computers 组织单位(OU)中的所有计算机账户。
PowerShell 示例:
Get-ADComputer -Filter * -SearchBase "OU=Computers,DC=example,DC=com" | Select-Object Name, sAMAccountName
PowerShell 通过 -SearchBase 参数可以查询特定 OU 中的计算机账户。
91. 查找并列出所有活动的计算机账户
ADFind 示例:
ADFind -b "DC=example,DC=com" -f "(lastLogonTimestamp>=1)" -attr "cn,lastLogonTimestamp"
此命令查找所有有活动的计算机账户(lastLogonTimestamp 大于某个时间值)。
PowerShell 示例:
Get-ADComputer -Filter {lastLogonTimestamp -gt 0} | Select-Object Name, lastLogonTimestamp
PowerShell 通过 lastLogonTimestamp 属性查找所有有登录记录的计算机账户。
92. 查看域控制器的健康状态
ADFind 示例:
ADFind -b "CN=Domain Controllers,DC=example,DC=com" -f "(objectClass=computer)" -attr "cn,operatingSystem,operatingSystemVersion"
此命令列出所有域控制器及其操作系统版本,帮助你了解域控制器的健康状况。
PowerShell 示例:
Get-ADDomainController -Filter * | Select-Object Name, OperatingSystem, IsGlobalCatalog
PowerShell 可以通过 Get-ADDomainController 查看域控制器的状态。
93. 检查和报告域名系统(DNS)设置
ADFind 示例:
ADFind -b "CN=Partitions,DC=example,DC=com" -f "(objectClass=dnsNode)" -attr "name"
此命令列出所有 DNS 节点的名称。
PowerShell 示例:
Get-DnsServerZone | Select-Object Name, ZoneType
PowerShell 使用 Get-DnsServerZone 查看 DNS 区域的设置和类型。
94. 列出所有未成功登录的用户
ADFind 示例:
ADFind -b "DC=example,DC=com" -f "(lastLogonTimestamp=0)" -attr "sAMAccountName,lastLogonTimestamp"
此命令列出所有从未登录过的用户。
PowerShell 示例:
Get-ADUser -Filter {lastLogonTimestamp -eq 0} | Select-Object Name, sAMAccountName
PowerShell 通过 lastLogonTimestamp 属性筛选出未登录过的用户。
95. 查看 Active Directory 操作日志
ADFind 示例:
ADFind -b "CN=Logs,DC=example,DC=com" -f "(objectClass=*)" -attr "logonTime"
此命令可以查询操作日志,获取最近的登录时间和相关日志信息。
PowerShell 示例:
Get-WinEvent -LogName "Security" -FilterXPath "*[EventData[Data[@Name='LogonType']]]" | Select-Object TimeCreated, Message
PowerShell 通过 Get-WinEvent 获取 Windows 安全日志,筛选登录相关的事件。
96. 修改用户属性(如邮箱、电话等)
ADFind 示例:
ADFind -b "DC=example,DC=com" -f "(sAMAccountName=johndoe)" -set "mail=johndoe@example.com"
此命令修改指定用户的邮箱地址。
PowerShell 示例:
Set-ADUser -Identity "johndoe" -EmailAddress "johndoe@example.com"
PowerShell 通过 Set-ADUser 可以轻松修改用户的各种属性。
总结
在之前的基础上,这些命令进一步扩展了对 Active Directory 环境的管理,特别是在:
- 账户管理,如密码重置、账户锁定、禁用、过期等;
- 组和计算机管理,如成员管理、OU 管理、计算机账户活动等;
- 域控制器和 DNS 状态监控;
- 日志和操作监控,如查看登录日志、活动监控等。
掌握这些命令将极大提升你的 AD 管理效率,尤其在面对复杂的用户和计算机环境时。
深入了解一些更高级的 Active Directory 管理命令,涵盖更多的管理任务和最佳实践。
97. 检查用户的组成员身份变更历史
PowerShell 示例:
Get-ADUser -Identity "johndoe" -Properties MemberOf | Select-Object Name, MemberOf
此命令显示用户 johndoe 所在的所有组。如果需要追踪用户的组成员历史,可以结合日志系统或审计日志来获取更多历史数据。
98. 列出所有被禁用的用户
ADFind 示例:
ADFind -b "DC=example,DC=com" -f "(userAccountControl:1.2.840.113556.1.4.803:=2)" -attr "sAMAccountName"
此命令查找所有被禁用的用户账户。
PowerShell 示例:
Get-ADUser -Filter {Enabled -eq $false} | Select-Object Name, sAMAccountName
PowerShell 直接使用 Enabled 属性来筛选出禁用的用户。
99. 列出所有在某个时间范围内更改的对象
PowerShell 示例:
$startDate = (Get-Date).AddDays(-30)
Get-ADObject -Filter {whenChanged -gt $startDate} -Properties whenChanged | Select-Object Name, whenChanged
此命令列出过去 30 天内更改过的所有对象。可以通过修改 AddDays 参数来调整时间范围。
100. 查找并列出所有没有登录过的计算机
ADFind 示例:
ADFind -b "DC=example,DC=com" -f "(lastLogonTimestamp=0)" -attr "cn,lastLogonTimestamp"
此命令列出所有没有登录过的计算机账户。
PowerShell 示例:
Get-ADComputer -Filter {lastLogonTimestamp -eq 0} | Select-Object Name, lastLogonTimestamp
PowerShell 通过 lastLogonTimestamp 过滤出没有登录的计算机。
101. 检查并列出所有只读域控制器
ADFind 示例:
ADFind -b "CN=Domain Controllers,DC=example,DC=com" -f "(operatingSystem=Windows Server*)" -attr "cn,operatingSystem"
此命令列出所有运行 Windows Server 系统的域控制器,便于查找只读域控制器(RODC)。
PowerShell 示例:
Get-ADDomainController -Filter {IsReadOnly -eq $true} | Select-Object Name, OperatingSystem
PowerShell 通过 IsReadOnly 属性筛选出只读域控制器(RODC)。
102. 导出 AD 用户的所有属性
PowerShell 示例:
Get-ADUser -Filter * -Properties * | Select-Object Name, * | Export-Csv "ADUsers.csv" -NoTypeInformation
此命令将导出所有用户的属性并保存为 CSV 文件,便于后续分析或备份。
103. 检查所有 AD 用户是否符合密码策略
PowerShell 示例:
Get-ADUser -Filter * -Properties PasswordLastSet | Where-Object {($_.PasswordLastSet -eq $null) -or ($_.PasswordLastSet -lt (Get-Date).AddDays(-90))} | Select-Object Name, PasswordLastSet
此命令检查所有 AD 用户密码是否符合策略,例如是否在 90 天内更改过密码。
104. 查看和修改用户的属性(例如邮箱或电话号码)
PowerShell 示例:
Set-ADUser -Identity "johndoe" -OfficePhone "123-456-7890" -EmailAddress "johndoe@newdomain.com"
此命令修改用户 johndoe 的办公电话和邮箱地址。
105. 查询并列出所有管理员组成员
ADFind 示例:
ADFind -b "DC=example,DC=com" -f "(cn=Administrators)" -attr "member"
此命令列出所有管理员组的成员。
PowerShell 示例:
Get-ADGroupMember -Identity "Administrators" | Select-Object Name, sAMAccountName
PowerShell 查询 Administrators 组的成员,列出用户名和账户名。
106. 查看组织单位(OU)中的所有对象
ADFind 示例:
ADFind -b "OU=Sales,DC=example,DC=com" -f "(objectClass=*)" -attr "cn"
此命令列出 Sales 组织单位中的所有对象。
PowerShell 示例:
Get-ADOrganizationalUnit -Filter * -SearchBase "OU=Sales,DC=example,DC=com" | Select-Object Name
PowerShell 使用 Get-ADOrganizationalUnit 列出特定 OU 中的所有对象。
107. 查找所有外部信任关系
PowerShell 示例:
Get-ADTrust | Select-Object Name, TrustType, Direction
此命令列出所有外部信任关系,显示信任关系的名称、类型和方向(例如单向或双向)。
108. 查询 Active Directory 服务是否正常运行
PowerShell 示例:
Test-ADDomainController -Identity "DC01" | Select-Object Name, IsRunning
此命令测试指定域控制器是否正常运行,返回其状态。
109. 查看 Active Directory 的全局编录状态
PowerShell 示例:
Get-ADDomainController -Filter * | Select-Object Name, IsGlobalCatalog
此命令列出所有域控制器,并显示它们是否是全局编录(Global Catalog)服务器。
110. 查看和报告所有域控制器的负载和健康状态
PowerShell 示例:
Get-ADDomainController -Filter * | Select-Object Name, IsGlobalCatalog, OperatingSystem, Site, IsReadOnly | Format-Table
此命令报告域控制器的负载、操作系统类型、是否为只读域控制器、是否为全局编录等关键信息。
111. 检测并报告域控制器的时钟同步情况
PowerShell 示例:
Get-ADDomainController -Filter * | Select-Object Name, TimeSynchronizationStatus
此命令报告域控制器的时钟同步状态,确保域控制器的时钟设置正确。
112. 列出特定用户的组成员身份
PowerShell 示例:
Get-ADUser -Identity "johndoe" | Get-ADUserMembership | Select-Object Name
此命令列出指定用户所属的所有组。
113. 查找并删除过期的计算机账户
PowerShell 示例:
Get-ADComputer -Filter {LastLogonDate -lt (Get-Date).AddDays(-180)} | Remove-ADComputer -Confirm:$false
此命令删除 180 天未登录的计算机账户。
114. 查看和管理所有共享文件夹权限
PowerShell 示例:
Get-SmbShare | Select-Object Name, Path, Description | Format-Table
此命令列出所有 SMB 共享,并显示共享名称、路径和描述信息。
115. 检查所有域控制器的站点配置
PowerShell 示例:
Get-ADDomainController -Filter * | Select-Object Name, Site
此命令列出所有域控制器的站点信息。
总结
这些命令进一步扩展了对 Active Directory(AD)的管理,包括:
- 账户和组管理:检查账户和组的状态、修改属性;
- 域控制器管理:查看域控制器的状态、全局编录配置、健康状况等;
- 计算机和登录管理:查看计算机的登录记录、查找未登录或过期的计算机账户;
- 信任和安全配置:查看外部信任关系、时钟同步、权限管理等。
更多关于 Active Directory (AD) 管理和 PowerShell 使用的实用命令。
116. 查看所有用户的密码过期日期
PowerShell 示例:
Get-ADUser -Filter * -Properties "PasswordLastSet" | Select-Object Name, PasswordLastSet, @{Name="PasswordExpiryDate";Expression={$_.PasswordLastSet.AddDays(90)}}
此命令会显示每个用户的密码上次设置日期以及密码的过期日期(默认是 90 天后),适用于监控密码过期情况。
117. 检查所有用户的帐户是否被锁定
PowerShell 示例:
Get-ADUser -Filter * -Properties LockedOut | Where-Object {$_.LockedOut -eq $true} | Select-Object Name, LockedOut
此命令列出所有被锁定的用户账户。
118. 查询 Active Directory 中所有的组和组成员
PowerShell 示例:
Get-ADGroup -Filter * | ForEach-Object {
$group = $_
Get-ADGroupMember -Identity $group | Select-Object @{Name="Group";Expression={$group.Name}}, Name
}
此命令列出所有组,并显示每个组的成员。
119. 列出所有域控制器的健康状况
PowerShell 示例:
Get-ADDomainController -Filter * | Select-Object Name, IsGlobalCatalog, IsReadOnly, Site, OperatingSystem, LastLogonDate
此命令列出所有域控制器的健康状况,包含是否是全局编录、是否是只读域控制器、站点信息、操作系统版本和最后登录时间等。
120. 查询并列出所有被删除但仍在回收站中的对象
PowerShell 示例:
Get-ADObject -Filter * -IncludeDeletedObjects | Where-Object {$_.isDeleted -eq $true} | Select-Object Name, DeletedDate
此命令列出所有被删除但仍在回收站中的对象,包括其删除日期。适用于恢复误删除的对象。
121. 启用或禁用用户账户
PowerShell 示例:
- 启用用户账户:
powershellCopy Code
Enable-ADAccount -Identity "johndoe" - 禁用用户账户:
powershellCopy Code
Disable-ADAccount -Identity "johndoe"
此命令分别用于启用和禁用指定的用户账户。
122. 查询并显示所有 AD 计算机的操作系统版本
PowerShell 示例:
Get-ADComputer -Filter * -Properties OperatingSystem | Select-Object Name, OperatingSystem
此命令列出所有计算机及其操作系统版本,适用于监控计算机环境。
123. 列出所有邮箱启用的用户
PowerShell 示例:
Get-ADUser -Filter {mail -like "*"} | Select-Object Name, mail
此命令列出所有启用邮箱的用户及其邮箱地址。
124. 查看所有用户的属性(例如登录名、邮箱、电话号码)
PowerShell 示例:
Get-ADUser -Filter * -Properties SamAccountName, EmailAddress, OfficePhone | Select-Object Name, SamAccountName, EmailAddress, OfficePhone
此命令列出所有用户的登录名、邮箱地址和办公电话等基本信息。
125. 查看域中所有已过期的计算机账户
PowerShell 示例:
Get-ADComputer -Filter {LastLogonDate -lt (Get-Date).AddDays(-180)} | Select-Object Name, LastLogonDate
此命令查找所有过去 180 天没有登录的计算机账户,适用于清理不再使用的计算机。
126. 添加用户到特定组
PowerShell 示例:
Add-ADGroupMember -Identity "GroupName" -Members "johndoe"
此命令将用户 johndoe 添加到名为 "GroupName" 的组中。
127. 删除用户账户
PowerShell 示例:
Remove-ADUser -Identity "johndoe" -Confirm:$false
此命令删除名为 johndoe 的用户账户,并跳过确认提示。
128. 查询 AD 中所有已存在的组织单位 (OU)
PowerShell 示例:
Get-ADOrganizationalUnit -Filter * | Select-Object Name, DistinguishedName
此命令列出所有组织单位的名称和 Distinguished Name(DN)。
129. 查看域控制器的站点信息
PowerShell 示例:
Get-ADDomainController -Filter * | Select-Object Name, Site
此命令列出所有域控制器及其所在的站点信息,适用于检查域控制器的站点配置。
130. 查找所有具有特定属性的用户
PowerShell 示例:
Get-ADUser -Filter {Department -eq "Sales"} | Select-Object Name, Department
此命令查找部门为 "Sales" 的所有用户。
131. 查看并管理域信任关系
PowerShell 示例:
Get-ADTrust | Select-Object Name, TrustType, Direction, TrustAttributes
此命令列出所有域之间的信任关系,包括信任类型、方向以及属性。
132. 设置用户账户密码永不过期
PowerShell 示例:
Set-ADUser -Identity "johndoe" -PasswordNeverExpires $true
此命令将用户 johndoe 的密码设置为永不过期。
133. 查询特定域的所有信任关系
PowerShell 示例:
Get-ADDomain -Identity "example.com" | Get-ADTrust | Select-Object Name, TrustType, Direction
此命令查询 example.com 域与其他域之间的所有信任关系。
134. 查看并修改用户的个人资料(如地址、职位等)
PowerShell 示例:
Set-ADUser -Identity "johndoe" -StreetAddress "1234 Main St" -Title "Sales Manager"
此命令设置 johndoe 的街道地址和职位信息。
135. 检查并报告所有用户的组成员身份
PowerShell 示例:
Get-ADUser -Filter * | ForEach-Object {
$user = $_
Get-ADUserMemberOf -Identity $user | Select-Object @{Name="UserName";Expression={$user.Name}}, Name
}
此命令列出所有用户及其所属的组信息。
136. 查看并列出所有域控制器的操作系统版本
PowerShell 示例:
Get-ADDomainController -Filter * | Select-Object Name, OperatingSystem
此命令列出所有域控制器的操作系统版本,适用于管理多个域控制器的环境。
总结
这些高级命令进一步帮助您更好地管理 Active Directory 环境,涉及的内容包括:
- 用户、组和计算机管理:包括查看、添加、删除用户账户和组成员,管理密码策略、登录信息、组织单位(OU)等。
- 域控制器和站点管理:包括查看和管理域控制器的健康状况、时钟同步、操作系统等。
- 信任关系和安全配置:查看域信任关系、信任类型、方向、域控制器的全局编录状态等。

浙公网安备 33010602011771号