通过掌握这些 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-ADUserSet-ADUserRemove-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

进一步说明:

  1. 查询和筛选功能:无论是 ADFind 还是 PowerShell,都可以通过 -f 选项(ADFind)或 -Filter(PowerShell)来进行对象的过滤。PowerShell 提供了更强大的筛选功能和更加灵活的表达式支持,能够结合多个属性进行高级查询。

  2. 批量操作:在进行批量用户导出、组成员查询等操作时,PowerShell 通常使用 Export-CsvSelect-Object 等 cmdlet 将结果导出到文件,这对于自动化脚本和报告生成非常有用。

  3. 属性和信息查询:两者都支持查询对象的详细属性,但 PowerShell 更容易在脚本中使用管道(|)将多个命令组合,实现更复杂的查询和处理,如导出用户或计算机的多个属性信息。

  4. 批量添加或删除成员:PowerShell 使用 Add-ADGroupMemberRemove-ADGroupMember 可以批量地对组成员进行管理,而 ADFind 则使用 -add-remove 参数来实现类似功能。

  5. 多功能操作ADFind 提供了 -set-delete 等操作,方便修改和删除属性。PowerShell 的 Set-ADUserRemove-ADUser 等 cmdlet 则更灵活,可以通过管道和高级表达式进行更加定制化的操作。

总结:

  • ADFind 是一个专注于命令行查询和管理 Active Directory 对象的工具,适用于快速查询和修改 AD 对象,特别适合对系统配置和网络管理有一定经验的用户。
  • PowerShell 作为 Windows 系统的强大自动化和脚本语言,不仅提供了与 ADFind 相似的功能,还能够通过丰富的脚本编写能力、更强的管道处理和复杂操作,适用于大规模的自动化任务和 AD 管理工作。

探讨 ADFind 和 PowerShell 在 Active Directory 管理中的更多对比与应用。以下是一些更复杂的场景,以及如何使用 ADFind 和 PowerShell 完成这些任务。

1. 查看域内的所有计算机对象

ADFind 示例:

shellCopy Code
ADFind -b "DC=example,DC=com" -f "(objectClass=computer)" -attr "cn,operatingSystem"

此命令查询 example.com 域内的所有计算机对象,并列出它们的计算机名称(cn)和操作系统(operatingSystem)。

PowerShell 示例:

powershellCopy Code
Get-ADComputer -Filter * -Properties cn,operatingSystem | Select-Object cn,operatingSystem

使用 PowerShell,可以通过 Get-ADComputer 获取计算机对象,并结合 Select-Object 显示指定的属性。PowerShell 还支持更复杂的筛选操作,适合大规模查询。

2. 查找并列出特定组的所有成员

ADFind 示例:

shellCopy Code
ADFind -b "DC=example,DC=com" -f "(cn=HR Group)" -attr "member"

这将查询 HR Group 组的所有成员。

PowerShell 示例:

powershellCopy Code
Get-ADGroupMember -Identity "HR Group" | Select-Object Name,SamAccountName

PowerShell 通过 Get-ADGroupMember 获取组成员,支持管道操作进行进一步处理,例如列出每个成员的姓名和登录名。

3. 查找和修改用户的电子邮件地址

ADFind 示例:

shellCopy Code
ADFind -b "OU=Users,DC=example,DC=com" -f "(sAMAccountName=johndoe)" -set "mail=john.doe@example.com"

此命令通过 ADFind 设置用户 johndoe 的电子邮件地址。

PowerShell 示例:

powershellCopy Code
Set-ADUser -Identity "johndoe" -EmailAddress "john.doe@example.com"

PowerShell 使用 Set-ADUser 修改用户的属性,操作简洁明了,适用于自动化和脚本任务。

4. 批量删除特定 OU 下的所有用户

ADFind 示例:

shellCopy Code
ADFind -b "OU=Employees,DC=example,DC=com" -f "(objectClass=user)" -delete

ADFind 支持批量删除符合条件的对象,在这个例子中,它会删除 Employees 组织单元下的所有用户。

PowerShell 示例:

powershellCopy Code
Get-ADUser -Filter * -SearchBase "OU=Employees,DC=example,DC=com" | Remove-ADUser

PowerShell 使用管道和 Remove-ADUser cmdlet 实现批量删除用户的操作,可以通过管道将查询结果传递给 Remove-ADUser 来删除所有用户。

5. 将用户添加到多个组

ADFind 示例:

shellCopy Code
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 同时添加到 Group1Group2

PowerShell 示例:

powershellCopy Code
Add-ADGroupMember -Identity "Group1" -Members "johndoe"
Add-ADGroupMember -Identity "Group2" -Members "johndoe"

PowerShell 的 Add-ADGroupMember 可以多次使用来添加用户到不同的组,语法清晰易懂。

6. 查询并导出所有用户的密码策略

ADFind 示例:

shellCopy Code
ADFind -b "DC=example,DC=com" -f "(objectClass=user)" -attr "sAMAccountName, pwdLastSet"

这个命令会查询所有用户并返回他们的登录名(sAMAccountName)和密码最后修改时间(pwdLastSet)。

PowerShell 示例:

powershellCopy Code
Get-ADUser -Filter * -Properties sAMAccountName,pwdLastSet | Select-Object sAMAccountName,pwdLastSet | Export-Csv "users_password_policy.csv" -NoTypeInformation

PowerShell 支持将查询结果导出为 CSV 文件,非常适合报告和备份操作。

7. 检测并修复域控制器的复制问题

ADFind 示例:

shellCopy Code
ADFind -b "DC=example,DC=com" -f "(objectClass=domainController)" -attr "dNSHostName, replication"

查询所有域控制器的 DNS 名称和复制信息。

PowerShell 示例:

powershellCopy Code
Get-ADDomainController -Filter * -Properties dNSHostName,Replication

PowerShell 也能通过 Get-ADDomainController 获取域控制器的复制状态,使用管道处理后可以方便地进行修复或监控。

8. 查询并列出所有组织单位 (OU)

ADFind 示例:

shellCopy Code
ADFind -b "DC=example,DC=com" -f "(objectClass=organizationalUnit)" -attr "ou"

列出所有组织单位。

PowerShell 示例:

powershellCopy Code
Get-ADOrganizationalUnit -Filter * | Select-Object Name

PowerShell 的 Get-ADOrganizationalUnit cmdlet 简单易用,查询结果也能通过 Select-Object 进一步筛选。

9. 设置用户属性 (如职务、电话号码等)

ADFind 示例:

shellCopy Code
ADFind -b "OU=Users,DC=example,DC=com" -f "(sAMAccountName=johndoe)" -set "title=Manager" -set "telephoneNumber=1234567890"

在这个示例中,ADFind 用于修改用户的职务和电话号码。

PowerShell 示例:

powershellCopy Code
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 示例:

shellCopy Code
ADFind -b "DC=example,DC=com" -f "(objectClass=user)" -attr "sAMAccountName,lastLogon"

此命令将列出所有用户的登录名以及最近一次登录时间。

PowerShell 示例:

powershellCopy Code
Get-ADUser -Filter * -Properties sAMAccountName,lastLogonDate | Select-Object sAMAccountName,lastLogonDate

PowerShell 使用 lastLogonDate 属性,结合 Select-Object 来显示登录名和最后登录时间。这种方式会更加直观和易于后续处理。

11. 查看并修改组的描述

ADFind 示例:

shellCopy Code
ADFind -b "DC=example,DC=com" -f "(cn=HR Group)" -set "description=Human Resources"

通过 ADFind 可以直接修改组的描述。

PowerShell 示例:

powershellCopy Code
Set-ADGroup -Identity "HR Group" -Description "Human Resources"

PowerShell 使用 Set-ADGroup 可以修改组的描述。通过 -Description 参数,你可以非常轻松地为组添加或修改描述。

12. 列出所有组织单元 (OU) 中的用户

ADFind 示例:

shellCopy Code
ADFind -b "OU=Employees,DC=example,DC=com" -f "(objectClass=user)" -attr "cn,sAMAccountName"

这将列出 Employees 组织单元中所有用户的用户名和账号名。

PowerShell 示例:

powershellCopy Code
Get-ADUser -Filter * -SearchBase "OU=Employees,DC=example,DC=com" | Select-Object Name,sAMAccountName

PowerShell 使用 -SearchBase 参数来指定特定的组织单元,这样可以高效地查询某个特定 OU 中的所有用户。

13. 查找并列出组中的所有成员,并导出为 CSV 文件

ADFind 示例:

shellCopy Code
ADFind -b "DC=example,DC=com" -f "(cn=Sales)" -attr "member" > sales_group_members.txt

这个命令将 Sales 组中的成员列出,并将输出保存到一个文本文件中。

PowerShell 示例:

powershellCopy Code
Get-ADGroupMember -Identity "Sales" | Select-Object Name,sAMAccountName | Export-Csv "sales_group_members.csv" -NoTypeInformation

PowerShell 提供了 Export-Csv 命令,允许将查询结果直接导出为 CSV 格式,非常适合生成报告或进行进一步分析。

14. 查找并删除未活动的用户

ADFind 示例:

shellCopy Code
ADFind -b "DC=example,DC=com" -f "(lastLogonTimestamp<=20191231000000)" -delete

此命令将删除在 2019 年 12 月 31 日之前没有登录的用户。

PowerShell 示例:

powershellCopy Code
Get-ADUser -Filter {lastLogonTimestamp -lt (Get-Date).AddYears(-1)} | Remove-ADUser

PowerShell 的 Get-ADUser 配合 lastLogonTimestamp 可以灵活地筛选出未登录超过一年或其他时间范围的用户,并使用 Remove-ADUser 进行删除操作。

15. 查看和修改用户的密码永不过期设置

ADFind 示例:

shellCopy Code
ADFind -b "OU=Users,DC=example,DC=com" -f "(sAMAccountName=johndoe)" -set "userAccountControl=512"

通过这个命令,可以将 johndoe 用户的密码设置为永不过期。userAccountControl=512 代表常规的用户账户,而修改为其他值可以实现不同的账户属性修改。

PowerShell 示例:

powershellCopy Code
Set-ADUser -Identity "johndoe" -PasswordNeverExpires $true

PowerShell 使用 Set-ADUser-PasswordNeverExpires 参数可以轻松实现该功能。该命令设置 johndoe 用户的密码永不过期。

16. 查询用户的组成员身份

ADFind 示例:

shellCopy Code
ADFind -b "DC=example,DC=com" -f "(sAMAccountName=johndoe)" -attr "memberOf"

此命令查询用户 johndoe 的所有组成员身份。

PowerShell 示例:

powershellCopy Code
Get-ADUser -Identity "johndoe" -Properties memberOf | Select-Object -ExpandProperty memberOf

PowerShell 使用 -Properties memberOf 参数来获取用户所属的所有组,并通过 Select-Object -ExpandProperty 显示所有组。

17. 查看和修改用户的登录脚本路径

ADFind 示例:

shellCopy Code
ADFind -b "OU=Users,DC=example,DC=com" -f "(sAMAccountName=johndoe)" -set "scriptPath=\\Server\Scripts\logon.bat"

此命令会将用户 johndoe 的登录脚本路径设置为指定的路径。

PowerShell 示例:

powershellCopy Code
Set-ADUser -Identity "johndoe" -ScriptPath "\\Server\Scripts\logon.bat"

PowerShell 通过 Set-ADUser 使用 -ScriptPath 参数来设置用户的登录脚本路径。

18. 批量启用或禁用用户账户

ADFind 示例:

shellCopy Code
ADFind -b "OU=Employees,DC=example,DC=com" -f "(enabled=FALSE)" -set "enabled=TRUE"

此命令将 Employees 组织单元中所有禁用的用户账户启用。

PowerShell 示例:

powershellCopy Code
Get-ADUser -Filter {Enabled -eq $false} -SearchBase "OU=Employees,DC=example,DC=com" | Enable-ADAccount

PowerShell 使用 Get-ADUser 获取所有禁用的用户并使用 Enable-ADAccount 进行批量启用。

19. 查询域内所有域控制器的状态

ADFind 示例:

shellCopy Code
ADFind -b "DC=example,DC=com" -f "(objectClass=domainController)" -attr "dNSHostName"

该命令列出所有域控制器的 DNS 主机名。

PowerShell 示例:

powershellCopy Code
Get-ADDomainController -Filter * | Select-Object dNSHostName

PowerShell 通过 Get-ADDomainController 可以获取并显示所有域控制器的 DNS 主机名。

20. 生成 Active Directory 用户的完整报告并导出为 CSV

ADFind 示例:

shellCopy Code
ADFind -b "DC=example,DC=com" -f "(objectClass=user)" -attr "cn,sAMAccountName,mail,telephoneNumber" > users_report.txt

ADFind 可以将所有用户的详细信息导出到文本文件中。

PowerShell 示例:

powershellCopy Code
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 示例:

shellCopy Code
ADFind -b "DC=example,DC=com" -f "(cn=Sales)" -attr "member" -limit 100

该命令会查询名为 Sales 的组,并列出其成员。通过 -limit 参数限制查询结果数量。

PowerShell 示例:

powershellCopy Code
Get-ADGroupMember -Identity "Sales" | Where-Object { $_.objectClass -eq "user" } | Select-Object Name,sAMAccountName

PowerShell 通过 Get-ADGroupMember 获取 Sales 组成员,并使用 Where-Object 筛选出用户类型的成员。Select-Object 可以进一步选择需要显示的属性。

22. 批量重置多个用户的密码

ADFind 示例:

shellCopy Code
ADFind -b "DC=example,DC=com" -f "(objectClass=user)" -set "userPassword=NewPassword123"

通过此命令,可以将所有用户的密码设置为 NewPassword123

PowerShell 示例:

powershellCopy Code
Get-ADUser -Filter * | ForEach-Object { Set-ADAccountPassword -Identity $_ -NewPassword (ConvertTo-SecureString "NewPassword123" -AsPlainText -Force) -Reset }

PowerShell 的 ForEach-Object 使得批量重置密码变得更加灵活,并且通过 ConvertTo-SecureString 来处理密码的安全性。

23. 查看并修改计算机账户的属性

ADFind 示例:

shellCopy Code
ADFind -b "DC=example,DC=com" -f "(objectClass=computer)" -attr "name,operatingSystem" -set "operatingSystem=Windows Server 2022"

此命令查询所有计算机账户,并修改其操作系统属性为 Windows Server 2022

PowerShell 示例:

powershellCopy Code
Get-ADComputer -Filter * -Properties operatingSystem | Set-ADComputer -OperatingSystem "Windows Server 2022"

PowerShell 使用 Set-ADComputer 可以批量修改计算机账户的操作系统属性。

24. 批量添加用户到多个组

ADFind 示例:

shellCopy Code
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 添加到 SalesMarketing 两个组中。

PowerShell 示例:

powershellCopy Code
Add-ADGroupMember -Identity "Sales" -Members "johndoe"
Add-ADGroupMember -Identity "Marketing" -Members "johndoe"

PowerShell 使用 Add-ADGroupMember 命令将 johndoe 添加到 SalesMarketing 两个组。

25. 查看并设置用户的帐户启用/禁用状态

ADFind 示例:

shellCopy Code
ADFind -b "DC=example,DC=com" -f "(sAMAccountName=johndoe)" -attr "userAccountControl"

该命令查询 johndoe 用户的 userAccountControl 属性,用于判断账户是否被禁用。

PowerShell 示例:

powershellCopy Code
Get-ADUser -Identity "johndoe" | Select-Object Name,Enabled

PowerShell 使用 Enabled 属性直接显示用户账户是否启用。如果需要修改账户状态,可以使用 Enable-ADAccountDisable-ADAccount

26. 根据属性筛选 Active Directory 用户

ADFind 示例:

shellCopy Code
ADFind -b "DC=example,DC=com" -f "(mail=*@example.com)" -attr "cn,sAMAccountName"

此命令查询所有使用 @example.com 邮箱域名的用户,并列出其姓名和账号名。

PowerShell 示例:

powershellCopy Code
Get-ADUser -Filter {mail -like "*@example.com"} | Select-Object Name,sAMAccountName

PowerShell 使用 -like 来进行邮箱地址的模糊匹配,并列出匹配条件的用户信息。

27. 查询 Active Directory 中的所有 OU (组织单元)

ADFind 示例:

shellCopy Code
ADFind -b "DC=example,DC=com" -f "(objectClass=organizationalUnit)" -attr "dn"

此命令列出 Active Directory 中的所有组织单元的 Distinguished Name(DN)。

PowerShell 示例:

powershellCopy Code
Get-ADOrganizationalUnit -Filter * | Select-Object DistinguishedName

PowerShell 使用 Get-ADOrganizationalUnit 命令列出所有组织单元的 DN 信息,Select-Object 用于筛选出所需的属性。

28. 列出所有计算机账户及其操作系统信息

ADFind 示例:

shellCopy Code
ADFind -b "DC=example,DC=com" -f "(objectClass=computer)" -attr "name,operatingSystem"

此命令列出所有计算机账户的名称和操作系统属性。

PowerShell 示例:

powershellCopy Code
Get-ADComputer -Filter * -Properties operatingSystem | Select-Object Name,operatingSystem

PowerShell 使用 Get-ADComputer 获取所有计算机账户及其操作系统信息,并通过 Select-Object 进行展示。

29. 根据特定时间范围查找修改过的用户账户

ADFind 示例:

shellCopy Code
ADFind -b "DC=example,DC=com" -f "(whenChanged>=2023-01-01)" -attr "cn,sAMAccountName,whenChanged"

此命令查询在指定时间后(例如 2023 年 1 月 1 日)被修改的用户账户。

PowerShell 示例:

powershellCopy Code
Get-ADUser -Filter {whenChanged -gt "2023-01-01"} | Select-Object Name,sAMAccountName,whenChanged

PowerShell 使用 whenChanged 属性筛选出在指定日期后修改的用户账户。

30. 查询并修改计算机账户的 DNS 名称

ADFind 示例:

shellCopy Code
ADFind -b "DC=example,DC=com" -f "(objectClass=computer)" -set "dNSHostName=NewComputerName.example.com"

该命令修改所有计算机账户的 DNS 名称。

PowerShell 示例:

powershellCopy Code
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 示例:

shellCopy Code
ADFind -b "DC=example,DC=com" -f "(objectClass=user)" -attr "cn,lastLogonTimestamp"

此命令查询所有用户的 lastLogonTimestamp 属性。lastLogonTimestamp 是用户上次成功登录的时间,通常在域控制器之间复制。

PowerShell 示例:

powershellCopy Code
Get-ADUser -Filter * -Properties lastLogonTimestamp | Select-Object Name, @{Name="LastLogon";Expression={[datetime]::FromFileTime($_.lastLogonTimestamp)}}

PowerShell 的 lastLogonTimestamp 属性存储为文件时间戳,FromFileTime 将其转换为易于理解的日期和时间格式。

32. 查看组内的所有成员及其详细信息

ADFind 示例:

shellCopy Code
ADFind -b "CN=Sales,OU=Groups,DC=example,DC=com" -f "(objectClass=user)" -attr "cn,sAMAccountName,memberOf"

这个命令将查询 Sales 组中的所有成员,并列出他们的姓名、账号名和所在组的详细信息。

PowerShell 示例:

powershellCopy Code
Get-ADGroupMember -Identity "Sales" | Get-ADUser -Properties memberOf | Select-Object Name,sAMAccountName,memberOf

PowerShell 可以更精确地列出每个成员的组信息,使用 Get-ADUser 提供更多的用户属性。

33. 批量启用或禁用用户账户

ADFind 示例:

shellCopy Code
ADFind -b "DC=example,DC=com" -f "(sAMAccountName=johndoe)" -set "userAccountControl=512"

此命令将 johndoe 用户账户启用。userAccountControl 属性的 512 值表示账户已启用。

PowerShell 示例:

powershellCopy Code
Get-ADUser -Filter * | ForEach-Object { Enable-ADAccount -Identity $_ }

这段 PowerShell 脚本可以启用所有用户账户。使用 Disable-ADAccount 可以实现禁用。

34. 按用户的账号名查询并修改其邮箱地址

ADFind 示例:

shellCopy Code
ADFind -b "DC=example,DC=com" -f "(sAMAccountName=johndoe)" -set "mail=johndoe@example.com"

这个命令将用户 johndoe 的邮箱地址修改为 johndoe@example.com

PowerShell 示例:

powershellCopy Code
Set-ADUser -Identity "johndoe" -EmailAddress "johndoe@example.com"

PowerShell 提供了更简洁的命令来修改用户的邮箱地址。

35. 查询 Active Directory 中的所有安全组

ADFind 示例:

shellCopy Code
ADFind -b "DC=example,DC=com" -f "(groupType=-2147483646)" -attr "cn,sAMAccountName"

此命令查询所有的安全组。groupType=-2147483646 表示安全组类型。

PowerShell 示例:

powershellCopy Code
Get-ADGroup -Filter {GroupScope -eq "Global" -or GroupScope -eq "Universal" -or GroupScope -eq "DomainLocal"} | Select-Object Name,sAMAccountName

PowerShell 使用 GroupScope 来筛选不同类型的安全组。

36. 查询用户是否属于某个组

ADFind 示例:

shellCopy Code
ADFind -b "DC=example,DC=com" -f "(memberOf=CN=Sales,OU=Groups,DC=example,DC=com)" -attr "cn,sAMAccountName"

此命令查询属于 Sales 组的用户。

PowerShell 示例:

powershellCopy Code
Get-ADUser -Filter {MemberOf -like "*Sales*"} | Select-Object Name,sAMAccountName

PowerShell 可以使用 MemberOf 属性过滤出属于指定组的用户。

37. 查看计算机的最后登录时间

ADFind 示例:

shellCopy Code
ADFind -b "DC=example,DC=com" -f "(objectClass=computer)" -attr "cn,lastLogonTimestamp"

此命令列出计算机账户的 lastLogonTimestamp 属性,用于查看计算机的最后登录时间。

PowerShell 示例:

powershellCopy Code
Get-ADComputer -Filter * -Properties lastLogonTimestamp | Select-Object Name, @{Name="LastLogon";Expression={[datetime]::FromFileTime($_.lastLogonTimestamp)}}

PowerShell 同样可以将 lastLogonTimestamp 转换为易读的日期格式,帮助管理员了解计算机的活跃情况。

38. 将计算机添加到域

ADFind 示例:

shellCopy Code
ADFind -b "CN=Computers,DC=example,DC=com" -f "(objectClass=computer)" -set "userAccountControl=4096"

此命令会将计算机账户的 userAccountControl 属性设置为 4096,表示计算机账户已加入域。

PowerShell 示例:

powershellCopy Code
Add-Computer -DomainName "example.com" -Credential (Get-Credential) -Restart

PowerShell 使用 Add-Computer 可以将计算机加入到指定域,支持自动重启。

39. 查看特定 OU 中的所有对象(用户/计算机)

ADFind 示例:

shellCopy Code
ADFind -b "OU=Sales,DC=example,DC=com" -f "(objectClass=*)" -attr "cn"

此命令查询 Sales 组织单元(OU)中的所有对象,列出它们的名称。

PowerShell 示例:

powershellCopy Code
Get-ADObject -Filter * -SearchBase "OU=Sales,DC=example,DC=com" | Select-Object Name

PowerShell 可以更精确地控制查询结果,使用 -SearchBase 定义组织单元。

40. 获取所有管理员组及其成员

ADFind 示例:

shellCopy Code
ADFind -b "DC=example,DC=com" -f "(name=Admin*)" -attr "cn,member"

此命令查询所有名称以 Admin 开头的组及其成员。

PowerShell 示例:

powershellCopy Code
Get-ADGroup -Filter {Name -like "Admin*"} | Get-ADGroupMember | Select-Object Name,sAMAccountName

PowerShell 使用 Get-ADGroupMember 获取管理员组的成员,并列出其账号信息。


总结与扩展:

通过掌握这些 ADFind 和 PowerShell 的命令,你可以高效地管理 Active Directory 环境中的各种对象和属性。这些方法对于日常的用户管理、组管理、计算机管理等任务非常有用。如果你希望将这些命令结合到更大的自动化脚本中,PowerShell 提供了非常强大的支持。

关键点:

  1. 自动化:使用 PowerShell 脚本可以大大减少手动操作,尤其是当需要执行批量操作时。
  2. 灵活性:PowerShell 可以结合条件语句、管道等强大功能,满足更复杂的管理需求。
  3. 效率ADFind 适合快速查询,尤其在小规模环境或临时任务中十分有效。

深入 Active Directory 的管理,下面我将为你展示更多复杂场景下的 ADFind 和 PowerShell 命令,帮助你提高管理效率:

41. 批量重置多个用户的密码

ADFind 示例:

shellCopy Code
ADFind -b "DC=example,DC=com" -f "(sAMAccountName=johndoe*)" -set "userPassword=newpassword"

此命令会批量重置所有以 johndoe 开头的用户密码。

PowerShell 示例:

powershellCopy Code
Get-ADUser -Filter {sAMAccountName -like "johndoe*"} | Set-ADAccountPassword -NewPassword (ConvertTo-SecureString "newpassword" -AsPlainText -Force)

PowerShell 更加灵活地处理批量重置密码,使用 ConvertTo-SecureString 以安全的方式处理密码。

42. 删除过期的计算机账户

ADFind 示例:

shellCopy Code
ADFind -b "DC=example,DC=com" -f "(objectClass=computer)" -attr "lastLogonTimestamp" -time "365"

此命令查询超过 365 天未登录的计算机账户,并根据输出进行删除操作。

PowerShell 示例:

powershellCopy Code
Get-ADComputer -Filter {lastLogonTimestamp -lt (Get-Date).AddDays(-365)} | Remove-ADComputer -Confirm:$false

PowerShell 使用 Get-ADComputer 结合 lastLogonTimestamp 来筛选并删除过期的计算机账户。

43. 创建一个新的组并将用户添加到该组

ADFind 示例:

shellCopy Code
ADFind -b "DC=example,DC=com" -f "(objectClass=group)" -set "cn=NewGroup,groupType=-2147483646"

此命令创建一个名为 NewGroup 的安全组。

PowerShell 示例:

powershellCopy Code
New-ADGroup -Name "NewGroup" -GroupScope Global -Path "OU=Groups,DC=example,DC=com"
Add-ADGroupMember -Identity "NewGroup" -Members "johndoe", "janedoe"

PowerShell 可以创建新组并直接将用户添加到该组。

44. 查看所有组的成员及其权限

ADFind 示例:

shellCopy Code
ADFind -b "DC=example,DC=com" -f "(objectClass=group)" -attr "cn,memberOf"

此命令查询所有组并列出每个组的成员信息。

PowerShell 示例:

powershellCopy Code
Get-ADGroup -Filter * | ForEach-Object { Get-ADGroupMember -Identity $_.Name | Select-Object Name, sAMAccountName }

PowerShell 可以在同一命令中获取组成员的详细信息,更灵活地处理复杂的查询需求。

45. 列出所有未启用的用户账户

ADFind 示例:

shellCopy Code
ADFind -b "DC=example,DC=com" -f "(userAccountControl:1.2.840.113556.1.4.803:=2)" -attr "cn,sAMAccountName"

此命令列出所有未启用的用户账户。userAccountControl 中的标志 2 表示账户已禁用。

PowerShell 示例:

powershellCopy Code
Get-ADUser -Filter {Enabled -eq $false} | Select-Object Name, sAMAccountName

PowerShell 更加简洁,使用 Enabled 属性过滤出所有禁用的账户。

46. 查询某一OU下的所有用户及其组成员身份

ADFind 示例:

shellCopy Code
ADFind -b "OU=Sales,DC=example,DC=com" -f "(objectClass=user)" -attr "cn,sAMAccountName,memberOf"

此命令查询 Sales 组织单元中的所有用户及其组成员身份。

PowerShell 示例:

powershellCopy Code
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 示例:

shellCopy Code
ADFind -b "DC=example,DC=com" -f "(objectClass=user)" -attr "cn,whenCreated" -time "2024-01-01" "2024-12-31"

此命令查询在 2024 年创建的所有用户账户。

PowerShell 示例:

powershellCopy Code
Get-ADUser -Filter {whenCreated -ge "2024-01-01" -and whenCreated -le "2024-12-31"} | Select-Object Name, whenCreated

PowerShell 可以更容易地处理日期范围,并且能够返回指定时间段内创建的用户账户。

48. 查看所有用户的最近一次密码更改日期

ADFind 示例:

shellCopy Code
ADFind -b "DC=example,DC=com" -f "(objectClass=user)" -attr "cn,pwdLastSet"

此命令查询所有用户的 pwdLastSet 属性,表示密码的最后一次设置时间。

PowerShell 示例:

powershellCopy Code
Get-ADUser -Filter * -Properties pwdLastSet | Select-Object Name, @{Name="LastPasswordSet";Expression={[datetime]::FromFileTime($_.pwdLastSet)}}

PowerShell 结合 pwdLastSet 属性将密码的最后修改时间转换为易读格式。

49. 批量删除多个组成员

ADFind 示例:

shellCopy Code
ADFind -b "DC=example,DC=com" -f "(objectClass=group)" -attr "member" -set "remove"

此命令删除指定组中的所有成员。

PowerShell 示例:

powershellCopy Code
Get-ADGroupMember -Identity "Sales" | ForEach-Object { Remove-ADGroupMember -Identity "Sales" -Member $_ -Confirm:$false }

PowerShell 让批量删除操作更加精细化,逐一删除组中的成员。

50. 执行 Active Directory 中的健康检查

PowerShell 示例:

powershellCopy Code
Get-ADDomainController -Filter * | Test-ADDomainControllerHealth

PowerShell 提供了一个强大的健康检查功能,可以测试域控制器的状态,包括网络、复制等情况。


总结与扩展:

通过这些示例,你可以更深入地管理和维护 Active Directory 环境中的各类对象。这些命令不仅限于用户和组的管理,还涵盖了计算机、密码、登录、OU、日期过滤等方面,帮助你快速定位和解决潜在问题。

关键点:

  1. 灵活的查询和批量操作:通过 PowerShell 可以轻松处理复杂的查询和批量操作,适用于不同规模的环境。
  2. 自动化任务:这些命令适合用在脚本中,以便自动化执行日常维护工作,节省时间和精力。
  3. 健康检查和报告:使用 PowerShell 提供的工具,可以定期执行健康检查和生成报告,确保 Active Directory 环境的稳定性。

深入探讨更多复杂的 ADFind 和 PowerShell 命令,这些可以帮助你更高效地进行 Active Directory 管理,尤其是在大型企业环境中。

51. 查看某一组中所有的直接成员及其嵌套组成员

ADFind 示例:

shellCopy Code
ADFind -b "DC=example,DC=com" -f "(cn=Sales)" -attr "member"

此命令列出名为 Sales 的组中的所有直接成员。

PowerShell 示例:

powershellCopy Code
Get-ADGroupMember -Identity "Sales" | ForEach-Object {
    $_.Name
    if ($_.objectClass -eq "group") {
        Get-ADGroupMember -Identity $_.Name | Select-Object Name
    }
}

PowerShell 允许我们递归地获取一个组中所有成员,并可以查看嵌套组的成员。

52. 将用户从多个组中移除

ADFind 示例:

shellCopy Code
ADFind -b "DC=example,DC=com" -f "(objectClass=group)" -attr "member" -set "remove"

此命令删除某个用户从多个组中的成员身份。

PowerShell 示例:

powershellCopy Code
$groups = Get-ADUser -Identity "johndoe" | Get-ADUserMembership
foreach ($group in $groups) {
    Remove-ADGroupMember -Identity $group -Member "johndoe" -Confirm:$false
}

PowerShell 提供更为灵活的方式,能自动提取用户所有的组成员身份,并逐个将其移除。

53. 批量启用或禁用多个用户账户

ADFind 示例:

shellCopy Code
ADFind -b "DC=example,DC=com" -f "(sAMAccountName=johndoe*)" -set "userAccountControl:1.2.840.113556.1.4.803:=2"

此命令禁用以 johndoe 开头的所有用户账户。

PowerShell 示例:

powershellCopy Code
Get-ADUser -Filter {sAMAccountName -like "johndoe*"} | Set-ADUser -Enabled $false

PowerShell 可以在几行代码内完成批量启用或禁用用户操作,非常高效。

54. 查看所有组织单位(OU)及其子组织单位

ADFind 示例:

shellCopy Code
ADFind -b "DC=example,DC=com" -f "(objectClass=organizationalUnit)" -attr "cn"

此命令列出所有组织单位(OU)的名称。

PowerShell 示例:

powershellCopy Code
Get-ADOrganizationalUnit -Filter * | Select-Object Name, DistinguishedName

PowerShell 提供了更加直观的方式来列出 OU,并能够显示 OU 的完整路径。

55. 获取并导出 Active Directory 用户列表到 CSV 文件

ADFind 示例:

shellCopy Code
ADFind -b "DC=example,DC=com" -f "(objectClass=user)" -attr "cn,sAMAccountName" > users.csv

此命令将所有用户的 cnsAMAccountName 属性导出到 users.csv 文件。

PowerShell 示例:

powershellCopy Code
Get-ADUser -Filter * -Properties cn, sAMAccountName | Select-Object cn, sAMAccountName | Export-Csv -Path "C:\Users\userlist.csv" -NoTypeInformation

PowerShell 的 Export-Csv 命令非常适合导出信息,支持多种格式的输出。

56. 查找特定 OU 下的所有计算机和服务器

ADFind 示例:

shellCopy Code
ADFind -b "OU=Servers,DC=example,DC=com" -f "(objectClass=computer)" -attr "cn,operatingSystem"

此命令查询 Servers OU 下所有计算机的名称及操作系统信息。

PowerShell 示例:

powershellCopy Code
Get-ADComputer -Filter * -SearchBase "OU=Servers,DC=example,DC=com" | Select-Object Name, OperatingSystem

PowerShell 让你通过 Select-Object 轻松筛选你所需的属性,并且支持对输出进行格式化。

57. 查找没有邮箱的用户账户

ADFind 示例:

shellCopy Code
ADFind -b "DC=example,DC=com" -f "(&(objectClass=user)(!(mail=*)))" -attr "cn,sAMAccountName"

此命令查询所有没有设置邮箱地址的用户。

PowerShell 示例:

powershellCopy Code
Get-ADUser -Filter {mail -notlike "*"} | Select-Object Name, sAMAccountName

PowerShell 的 -notlike 条件让查找没有邮箱的用户变得非常直观。

58. 查看域控制器的全局组成员

ADFind 示例:

shellCopy Code
ADFind -b "DC=example,DC=com" -f "(objectClass=group)" -attr "member"

此命令列出所有组的成员。

PowerShell 示例:

powershellCopy Code
Get-ADGroup -Filter {GroupScope -eq "Global"} | ForEach-Object {
    Get-ADGroupMember -Identity $_.Name | Select-Object Name, sAMAccountName
}

PowerShell 可以灵活地筛选全局组,并列出这些组中的成员。

59. 执行 AD 账户锁定的故障排除

ADFind 示例:

shellCopy Code
ADFind -b "DC=example,DC=com" -f "(lockoutTime>=1)" -attr "cn,sAMAccountName,lockoutTime"

此命令列出所有被锁定的账户,并显示锁定时间。

PowerShell 示例:

powershellCopy Code
Get-ADUser -Filter {lockoutTime -gt 0} | Select-Object Name, sAMAccountName, @{Name="LockoutTime";Expression={[datetime]::FromFileTime($_.lockoutTime)}}

PowerShell 提供了更灵活的方式,可以将锁定时间转换为可读格式。

60. 查找所有未启用的计算机账户

ADFind 示例:

shellCopy Code
ADFind -b "DC=example,DC=com" -f "(objectClass=computer)" -attr "cn,userAccountControl" -value "userAccountControl:1.2.840.113556.1.4.803:=2"

此命令查询所有未启用的计算机账户。

PowerShell 示例:

powershellCopy Code
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 示例:

shellCopy Code
ADFind -b "DC=example,DC=com" -f "(pwdLastSet<=1)" -attr "cn,sAMAccountName,pwdLastSet"

此命令查找所有密码设置时间较长的用户账户,通常这些账户可能已经过期或不再使用。

PowerShell 示例:

powershellCopy Code
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 示例:

shellCopy Code
ADFind -b "DC=example,DC=com" -f "(msExchRecipientTypeDetails=4)" -attr "cn,sAMAccountName"

此命令查找启用了多重身份验证的用户。这个属性可能因不同的设置而有所不同。

PowerShell 示例:

powershellCopy Code
Get-ADUser -Filter * | Where-Object { $_.ExtensionData -like "*mfa*" } | Select-Object Name, sAMAccountName

PowerShell 允许你通过扩展属性或者 MFA 配置来筛选启用多重身份验证的账户。

63. 查找属于特定组的用户,并检查他们的邮箱

ADFind 示例:

shellCopy Code
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 示例:

powershellCopy Code
$groupMembers = Get-ADGroupMember -Identity "Sales" | Select-Object -ExpandProperty SamAccountName
foreach ($user in $groupMembers) {
    Get-ADUser -Identity $user | Select-Object Name, mail
}

PowerShell 的 ForEach-Objectforeach 使得批量查询组成员邮箱变得简单。

64. 创建新用户并加入多个组

ADFind 示例:

shellCopy Code
ADFind -create -b "DC=example,DC=com" -f "(objectClass=user)" -attr "cn,sAMAccountName" -group "Group1,Group2"

此命令将创建新用户并将其加入到多个组。

PowerShell 示例:

powershellCopy Code
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-ADUserAdd-ADGroupMember 命令可以轻松实现批量操作,创建用户并加入多个组。

65. 查找所有没有组成员的空组

ADFind 示例:

shellCopy Code
ADFind -b "DC=example,DC=com" -f "(objectClass=group)" -attr "cn,member" | grep -L "member"

此命令列出所有没有成员的空组。

PowerShell 示例:

powershellCopy Code
Get-ADGroup -Filter * | Where-Object { (Get-ADGroupMember -Identity $_.DistinguishedName).Count -eq 0 } | Select-Object Name

PowerShell 通过 Get-ADGroupMember 可以很容易地筛选出没有成员的空组。

66. 批量重置用户密码

ADFind 示例:

shellCopy Code
ADFind -b "DC=example,DC=com" -f "(objectClass=user)" -attr "sAMAccountName" -set "password:NewP@ssw0rd"

此命令可以批量重置所有用户密码。

PowerShell 示例:

powershellCopy Code
Get-ADUser -Filter * | Set-ADAccountPassword -NewPassword (ConvertTo-SecureString -AsPlainText "NewP@ssw0rd" -Force)

PowerShell 提供了一种简洁的方式批量重置密码,确保所有用户密码都得到更新。

67. 查找没有设置 logonScript 属性的用户

ADFind 示例:

shellCopy Code
ADFind -b "DC=example,DC=com" -f "(objectClass=user)" -attr "logonScript" -value "*"

此命令查找没有设置 logonScript 属性的用户。

PowerShell 示例:

powershellCopy Code
Get-ADUser -Filter {logonScript -notlike "*"} | Select-Object Name, sAMAccountName

PowerShell 允许你通过 -notlike 筛选出没有设置登录脚本的用户。

68. 检查并修改用户的 userAccountControl 属性

ADFind 示例:

shellCopy Code
ADFind -b "DC=example,DC=com" -f "(sAMAccountName=johndoe)" -attr "userAccountControl" -set "userAccountControl:1.2.840.113556.1.4.803:=512"

此命令将用户的 userAccountControl 属性设置为 512,通常表示启用用户账户。

PowerShell 示例:

powershellCopy Code
Set-ADUser -Identity "johndoe" -UserPrincipalName "johndoe@example.com" -AccountPassword (ConvertTo-SecureString -AsPlainText "P@ssw0rd" -Force) -Enabled $true

PowerShell 可以直接修改用户的 userAccountControl 属性,并管理账户状态。

69. 清理过期的计算机账户

ADFind 示例:

shellCopy Code
ADFind -b "DC=example,DC=com" -f "(objectClass=computer)" -attr "cn,whenCreated" -value "whenCreated<01/01/2024"

此命令查找并删除 2024 年 1 月 1 日之前创建的过期计算机账户。

PowerShell 示例:

powershellCopy Code
Get-ADComputer -Filter {whenCreated -lt (Get-Date).AddYears(-1)} | Remove-ADComputer -Confirm:$false

PowerShell 提供更简洁的方式批量删除过期的计算机账户。

70. 报告哪些用户有未使用的邮箱

ADFind 示例:

shellCopy Code
ADFind -b "DC=example,DC=com" -f "(mail=*)" -attr "mail,lastLogonTimestamp"

此命令列出所有具有邮箱的用户,并显示他们的最后登录时间。

PowerShell 示例:

powershellCopy Code
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 示例:

shellCopy Code
ADFind -b "DC=example,DC=com" -f "(userAccountControl:1.2.840.113556.1.4.803:=2)" -attr "sAMAccountName,cn,userAccountControl"

此命令将查找所有被禁用的用户账户。

PowerShell 示例:

powershellCopy Code
Get-ADUser -Filter {Enabled -eq $false} | Select-Object Name, sAMAccountName

PowerShell 的 Enabled 属性非常方便,可以直接筛选出所有禁用的用户账户。

72. 查看哪些用户账户即将过期

ADFind 示例:

shellCopy Code
ADFind -b "DC=example,DC=com" -f "(whenChanged>=2025-01-01)" -attr "sAMAccountName,whenChanged"

此命令查找账户修改日期接近 2025 年 1 月 1 日的所有账户,通常这些账户接近到期或有更新。

PowerShell 示例:

powershellCopy Code
Get-ADUser -Filter {accountExpires -lt (Get-Date).AddDays(30)} | Select-Object Name, accountExpires

PowerShell 可以通过 accountExpires 属性筛选即将到期的用户账户。

73. 查找没有分配邮箱的用户

ADFind 示例:

shellCopy Code
ADFind -b "DC=example,DC=com" -f "(mail=*)" -attr "sAMAccountName" | grep -L "mail"

此命令列出没有设置 mail 属性的用户账户。

PowerShell 示例:

powershellCopy Code
Get-ADUser -Filter {mail -notlike "*"} | Select-Object Name, sAMAccountName

PowerShell 的 -notlike 操作符非常适合查找没有邮箱的用户。

74. 批量启用或禁用账户

ADFind 示例:

shellCopy Code
ADFind -b "DC=example,DC=com" -f "(objectClass=user)" -attr "sAMAccountName" -set "userAccountControl:1.2.840.113556.1.4.803:=512"

此命令将批量启用所有用户账户。

PowerShell 示例:

powershellCopy Code
Get-ADUser -Filter * | Set-ADUser -Enabled $false  # 禁用
Get-ADUser -Filter * | Set-ADUser -Enabled $true   # 启用

PowerShell 简洁地通过 Set-ADUser 修改账户状态,方便批量处理。

75. 列出所有用户的登录时间

ADFind 示例:

shellCopy Code
ADFind -b "DC=example,DC=com" -f "(objectClass=user)" -attr "sAMAccountName,lastLogonTimestamp"

此命令列出所有用户的最后登录时间。

PowerShell 示例:

powershellCopy Code
Get-ADUser -Filter * -Properties lastLogonTimestamp | Select-Object Name, sAMAccountName, @{Name="LastLogon";Expression={[datetime]::FromFileTime($_.lastLogonTimestamp)}}

PowerShell 允许我们通过 lastLogonTimestamp 属性获取用户的最后登录时间,并进行日期格式化。

76. 检查和报告账户锁定信息

ADFind 示例:

shellCopy Code
ADFind -b "DC=example,DC=com" -f "(lockoutTime>=1)" -attr "sAMAccountName,lockoutTime"

此命令查找被锁定的账户,并显示锁定时间。

PowerShell 示例:

powershellCopy Code
Get-ADUser -Filter {LockoutTime -gt 0} | Select-Object Name, sAMAccountName, LockoutTime

PowerShell 通过 LockoutTime 属性可以轻松列出所有被锁定的账户。

77. 列出所有的管理员账户

ADFind 示例:

shellCopy Code
ADFind -b "DC=example,DC=com" -f "(memberOf=CN=Administrators,OU=Groups,DC=example,DC=com)" -attr "sAMAccountName,cn"

此命令列出所有属于 Administrators 组的用户账户。

PowerShell 示例:

powershellCopy Code
Get-ADGroupMember -Identity "Administrators" | Select-Object Name, sAMAccountName

PowerShell 通过 Get-ADGroupMember 可以方便地列出组内所有成员。

78. 删除没有使用过的用户账户

ADFind 示例:

shellCopy Code
ADFind -b "DC=example,DC=com" -f "(lastLogonTimestamp<=1)" -attr "sAMAccountName,lastLogonTimestamp"

此命令查找那些从未登录过的用户账户。

PowerShell 示例:

powershellCopy Code
Get-ADUser -Filter {lastLogonTimestamp -lt (Get-Date).AddYears(1).ToFileTime()} | Remove-ADUser -Confirm:$false

PowerShell 通过 lastLogonTimestamp 属性筛选出未登录过的用户,并进行批量删除。

79. 查看和修改用户的组成员身份

ADFind 示例:

shellCopy Code
ADFind -b "DC=example,DC=com" -f "(sAMAccountName=johndoe)" -attr "memberOf"

此命令列出用户 johndoe 所属的所有组。

PowerShell 示例:

powershellCopy Code
Get-ADUser -Identity "johndoe" | Get-ADUserMembership | Select-Object Name

PowerShell 可以通过 Get-ADUserMembership 获取某个用户所属的所有组,并显示其组名。

80. 批量禁用不活动账户

ADFind 示例:

shellCopy Code
ADFind -b "DC=example,DC=com" -f "(lastLogonTimestamp<=2023-01-01)" -attr "sAMAccountName" -set "userAccountControl:1.2.840.113556.1.4.803:=514"

此命令禁用所有超过一定时间没有登录的账户。

PowerShell 示例:

powershellCopy Code
Get-ADUser -Filter {lastLogonTimestamp -lt (Get-Date).AddMonths(-6).ToFileTime()} | Set-ADUser -Enabled $false

PowerShell 可以通过 lastLogonTimestamp 属性筛选不活跃的账户,并将它们禁用。

81. 报告特定 OU 中的用户

ADFind 示例:

shellCopy Code
ADFind -b "OU=Sales,DC=example,DC=com" -f "(objectClass=user)" -attr "cn,sAMAccountName"

此命令列出 Sales 组织单位(OU)中的所有用户。

PowerShell 示例:

powershellCopy Code
Get-ADUser -Filter * -SearchBase "OU=Sales,DC=example,DC=com" | Select-Object Name, sAMAccountName

PowerShell 允许你指定搜索基准(-SearchBase)来限制查询范围,例如仅查询 Sales OU。

82. 备份和恢复 AD 配置

ADFind 示例:

shellCopy Code
ADFind -b "CN=Configuration,DC=example,DC=com" -f "(objectClass=*)"

此命令将查询整个 AD 配置部分,可以为备份做准备。

PowerShell 示例:

powershellCopy Code
Export-ADSnapshot -Path "C:\ADBackup"  # 备份
Restore-ADSnapshot -Path "C:\ADBackup"  # 恢复

PowerShell 提供了导出和恢复 AD 快照的功能,便于在需要时进行配置恢复。

总结

这些命令进一步扩展了你在管理 AD 时可以执行的高级操作。你可以:

  • 查找和管理用户状态,如禁用、锁定、过期等;
  • 监控和报告账户的活动情况,如登录时间、邮箱设置等;
  • 批量操作,如启用、禁用、密码重置等;
  • 维护 AD 结构,如清理不活跃账户、报告特定 OU 或组内的成员等。

通过将这些命令集成到自动化脚本中,你可以大大提高管理效率,并确保 Active Directory 环境始终保持最佳状态。

深入了解更多关于 Active Directory(AD)管理的高级命令,涵盖更多场景和任务。

83. 查找密码过期的用户

ADFind 示例:

shellCopy Code
ADFind -b "DC=example,DC=com" -f "(pwdLastSet<=1)" -attr "sAMAccountName,pwdLastSet"

此命令将列出那些密码过期的用户,pwdLastSet 属性指示上次密码设置的时间。

PowerShell 示例:

powershellCopy Code
Get-ADUser -Filter {pwdLastSet -lt (Get-Date).AddDays(-90).ToFileTime()} | Select-Object Name, sAMAccountName

PowerShell 通过 pwdLastSet 属性过滤出密码超过 90 天未更新的用户,可以根据具体要求调整时间。

84. 列出所有组及其成员

ADFind 示例:

shellCopy Code
ADFind -b "DC=example,DC=com" -f "(objectClass=group)" -attr "cn,member"

此命令将列出所有组及其成员。

PowerShell 示例:

powershellCopy Code
Get-ADGroup -Filter * | Get-ADGroupMember | Select-Object Name, sAMAccountName

PowerShell 通过 Get-ADGroupGet-ADGroupMember 组合使用,轻松列出每个组的成员。

85. 批量重置用户密码

ADFind 示例:

shellCopy Code
ADFind -b "DC=example,DC=com" -f "(objectClass=user)" -attr "sAMAccountName" -set "unicodePwd={NewPassword}"

此命令可以批量修改用户的密码。请注意,实际使用中密码必须以特定格式进行设置(加密或明文),并且要确保符合安全策略。

PowerShell 示例:

powershellCopy Code
Get-ADUser -Filter * | Set-ADAccountPassword -NewPassword (ConvertTo-SecureString "NewPassword" -AsPlainText -Force) -Reset

PowerShell 的 Set-ADAccountPassword 允许批量重置用户密码,使用 ConvertTo-SecureString 转换为安全字符串。

86. 列出特定用户的组成员

ADFind 示例:

shellCopy Code
ADFind -b "DC=example,DC=com" -f "(sAMAccountName=johndoe)" -attr "memberOf"

此命令将列出用户 johndoe 所在的所有组。

PowerShell 示例:

powershellCopy Code
Get-ADUser -Identity "johndoe" | Get-ADUserMembership | Select-Object Name

PowerShell 可以很方便地列出指定用户所属的所有组。

87. 查找所有没有组成员的组

ADFind 示例:

shellCopy Code
ADFind -b "DC=example,DC=com" -f "(member=*)" -attr "cn"

此命令会查找没有成员的组(即没有任何成员的组)。

PowerShell 示例:

powershellCopy Code
Get-ADGroup -Filter * | Where-Object { (Get-ADGroupMember $_).Count -eq 0 } | Select-Object Name

PowerShell 通过 Where-Object 筛选出没有成员的组,并显示组名。

88. 查看用户的密码策略

ADFind 示例:

shellCopy Code
ADFind -b "DC=example,DC=com" -f "(sAMAccountName=johndoe)" -attr "pwdLastSet"

此命令会显示指定用户的密码设置时间,通过 pwdLastSet 属性来获取。

PowerShell 示例:

powershellCopy Code
Get-ADUser -Identity "johndoe" -Properties "pwdLastSet" | Select-Object Name, @{Name="PasswordLastSet";Expression={[datetime]::FromFileTime($_.pwdLastSet)}}

PowerShell 通过 pwdLastSet 提供的时间戳转换为可读的日期格式。

89. 报告所有用户的账户状态

ADFind 示例:

shellCopy Code
ADFind -b "DC=example,DC=com" -f "(objectClass=user)" -attr "sAMAccountName,userAccountControl"

此命令列出所有用户账户的状态(启用/禁用)。

PowerShell 示例:

powershellCopy Code
Get-ADUser -Filter * | Select-Object Name, sAMAccountName, Enabled

PowerShell 直接使用 Enabled 属性来显示用户账户是否启用。

90. 查找特定 OU 中的所有计算机

ADFind 示例:

shellCopy Code
ADFind -b "OU=Computers,DC=example,DC=com" -f "(objectClass=computer)" -attr "cn,sAMAccountName"

此命令查找 Computers 组织单位(OU)中的所有计算机账户。

PowerShell 示例:

powershellCopy Code
Get-ADComputer -Filter * -SearchBase "OU=Computers,DC=example,DC=com" | Select-Object Name, sAMAccountName

PowerShell 通过 -SearchBase 参数可以查询特定 OU 中的计算机账户。

91. 查找并列出所有活动的计算机账户

ADFind 示例:

shellCopy Code
ADFind -b "DC=example,DC=com" -f "(lastLogonTimestamp>=1)" -attr "cn,lastLogonTimestamp"

此命令查找所有有活动的计算机账户(lastLogonTimestamp 大于某个时间值)。

PowerShell 示例:

powershellCopy Code
Get-ADComputer -Filter {lastLogonTimestamp -gt 0} | Select-Object Name, lastLogonTimestamp

PowerShell 通过 lastLogonTimestamp 属性查找所有有登录记录的计算机账户。

92. 查看域控制器的健康状态

ADFind 示例:

shellCopy Code
ADFind -b "CN=Domain Controllers,DC=example,DC=com" -f "(objectClass=computer)" -attr "cn,operatingSystem,operatingSystemVersion"

此命令列出所有域控制器及其操作系统版本,帮助你了解域控制器的健康状况。

PowerShell 示例:

powershellCopy Code
Get-ADDomainController -Filter * | Select-Object Name, OperatingSystem, IsGlobalCatalog

PowerShell 可以通过 Get-ADDomainController 查看域控制器的状态。

93. 检查和报告域名系统(DNS)设置

ADFind 示例:

shellCopy Code
ADFind -b "CN=Partitions,DC=example,DC=com" -f "(objectClass=dnsNode)" -attr "name"

此命令列出所有 DNS 节点的名称。

PowerShell 示例:

powershellCopy Code
Get-DnsServerZone | Select-Object Name, ZoneType

PowerShell 使用 Get-DnsServerZone 查看 DNS 区域的设置和类型。

94. 列出所有未成功登录的用户

ADFind 示例:

shellCopy Code
ADFind -b "DC=example,DC=com" -f "(lastLogonTimestamp=0)" -attr "sAMAccountName,lastLogonTimestamp"

此命令列出所有从未登录过的用户。

PowerShell 示例:

powershellCopy Code
Get-ADUser -Filter {lastLogonTimestamp -eq 0} | Select-Object Name, sAMAccountName

PowerShell 通过 lastLogonTimestamp 属性筛选出未登录过的用户。

95. 查看 Active Directory 操作日志

ADFind 示例:

shellCopy Code
ADFind -b "CN=Logs,DC=example,DC=com" -f "(objectClass=*)" -attr "logonTime"

此命令可以查询操作日志,获取最近的登录时间和相关日志信息。

PowerShell 示例:

powershellCopy Code
Get-WinEvent -LogName "Security" -FilterXPath "*[EventData[Data[@Name='LogonType']]]" | Select-Object TimeCreated, Message

PowerShell 通过 Get-WinEvent 获取 Windows 安全日志,筛选登录相关的事件。

96. 修改用户属性(如邮箱、电话等)

ADFind 示例:

shellCopy Code
ADFind -b "DC=example,DC=com" -f "(sAMAccountName=johndoe)" -set "mail=johndoe@example.com"

此命令修改指定用户的邮箱地址。

PowerShell 示例:

powershellCopy Code
Set-ADUser -Identity "johndoe" -EmailAddress "johndoe@example.com"

PowerShell 通过 Set-ADUser 可以轻松修改用户的各种属性。


总结

在之前的基础上,这些命令进一步扩展了对 Active Directory 环境的管理,特别是在:

  • 账户管理,如密码重置、账户锁定、禁用、过期等;
  • 组和计算机管理,如成员管理、OU 管理、计算机账户活动等;
  • 域控制器和 DNS 状态监控
  • 日志和操作监控,如查看登录日志、活动监控等。

掌握这些命令将极大提升你的 AD 管理效率,尤其在面对复杂的用户和计算机环境时。

深入了解一些更高级的 Active Directory 管理命令,涵盖更多的管理任务和最佳实践。

97. 检查用户的组成员身份变更历史

PowerShell 示例:

powershellCopy Code
Get-ADUser -Identity "johndoe" -Properties MemberOf | Select-Object Name, MemberOf

此命令显示用户 johndoe 所在的所有组。如果需要追踪用户的组成员历史,可以结合日志系统或审计日志来获取更多历史数据。

98. 列出所有被禁用的用户

ADFind 示例:

shellCopy Code
ADFind -b "DC=example,DC=com" -f "(userAccountControl:1.2.840.113556.1.4.803:=2)" -attr "sAMAccountName"

此命令查找所有被禁用的用户账户。

PowerShell 示例:

powershellCopy Code
Get-ADUser -Filter {Enabled -eq $false} | Select-Object Name, sAMAccountName

PowerShell 直接使用 Enabled 属性来筛选出禁用的用户。

99. 列出所有在某个时间范围内更改的对象

PowerShell 示例:

powershellCopy Code
$startDate = (Get-Date).AddDays(-30)
Get-ADObject -Filter {whenChanged -gt $startDate} -Properties whenChanged | Select-Object Name, whenChanged

此命令列出过去 30 天内更改过的所有对象。可以通过修改 AddDays 参数来调整时间范围。

100. 查找并列出所有没有登录过的计算机

ADFind 示例:

shellCopy Code
ADFind -b "DC=example,DC=com" -f "(lastLogonTimestamp=0)" -attr "cn,lastLogonTimestamp"

此命令列出所有没有登录过的计算机账户。

PowerShell 示例:

powershellCopy Code
Get-ADComputer -Filter {lastLogonTimestamp -eq 0} | Select-Object Name, lastLogonTimestamp

PowerShell 通过 lastLogonTimestamp 过滤出没有登录的计算机。

101. 检查并列出所有只读域控制器

ADFind 示例:

shellCopy Code
ADFind -b "CN=Domain Controllers,DC=example,DC=com" -f "(operatingSystem=Windows Server*)" -attr "cn,operatingSystem"

此命令列出所有运行 Windows Server 系统的域控制器,便于查找只读域控制器(RODC)。

PowerShell 示例:

powershellCopy Code
Get-ADDomainController -Filter {IsReadOnly -eq $true} | Select-Object Name, OperatingSystem

PowerShell 通过 IsReadOnly 属性筛选出只读域控制器(RODC)。

102. 导出 AD 用户的所有属性

PowerShell 示例:

powershellCopy Code
Get-ADUser -Filter * -Properties * | Select-Object Name, * | Export-Csv "ADUsers.csv" -NoTypeInformation

此命令将导出所有用户的属性并保存为 CSV 文件,便于后续分析或备份。

103. 检查所有 AD 用户是否符合密码策略

PowerShell 示例:

powershellCopy Code
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 示例:

powershellCopy Code
Set-ADUser -Identity "johndoe" -OfficePhone "123-456-7890" -EmailAddress "johndoe@newdomain.com"

此命令修改用户 johndoe 的办公电话和邮箱地址。

105. 查询并列出所有管理员组成员

ADFind 示例:

shellCopy Code
ADFind -b "DC=example,DC=com" -f "(cn=Administrators)" -attr "member"

此命令列出所有管理员组的成员。

PowerShell 示例:

powershellCopy Code
Get-ADGroupMember -Identity "Administrators" | Select-Object Name, sAMAccountName

PowerShell 查询 Administrators 组的成员,列出用户名和账户名。

106. 查看组织单位(OU)中的所有对象

ADFind 示例:

shellCopy Code
ADFind -b "OU=Sales,DC=example,DC=com" -f "(objectClass=*)" -attr "cn"

此命令列出 Sales 组织单位中的所有对象。

PowerShell 示例:

powershellCopy Code
Get-ADOrganizationalUnit -Filter * -SearchBase "OU=Sales,DC=example,DC=com" | Select-Object Name

PowerShell 使用 Get-ADOrganizationalUnit 列出特定 OU 中的所有对象。

107. 查找所有外部信任关系

PowerShell 示例:

powershellCopy Code
Get-ADTrust | Select-Object Name, TrustType, Direction

此命令列出所有外部信任关系,显示信任关系的名称、类型和方向(例如单向或双向)。

108. 查询 Active Directory 服务是否正常运行

PowerShell 示例:

powershellCopy Code
Test-ADDomainController -Identity "DC01" | Select-Object Name, IsRunning

此命令测试指定域控制器是否正常运行,返回其状态。

109. 查看 Active Directory 的全局编录状态

PowerShell 示例:

powershellCopy Code
Get-ADDomainController -Filter * | Select-Object Name, IsGlobalCatalog

此命令列出所有域控制器,并显示它们是否是全局编录(Global Catalog)服务器。

110. 查看和报告所有域控制器的负载和健康状态

PowerShell 示例:

powershellCopy Code
Get-ADDomainController -Filter * | Select-Object Name, IsGlobalCatalog, OperatingSystem, Site, IsReadOnly | Format-Table

此命令报告域控制器的负载、操作系统类型、是否为只读域控制器、是否为全局编录等关键信息。

111. 检测并报告域控制器的时钟同步情况

PowerShell 示例:

powershellCopy Code
Get-ADDomainController -Filter * | Select-Object Name, TimeSynchronizationStatus

此命令报告域控制器的时钟同步状态,确保域控制器的时钟设置正确。

112. 列出特定用户的组成员身份

PowerShell 示例:

powershellCopy Code
Get-ADUser -Identity "johndoe" | Get-ADUserMembership | Select-Object Name

此命令列出指定用户所属的所有组。

113. 查找并删除过期的计算机账户

PowerShell 示例:

powershellCopy Code
Get-ADComputer -Filter {LastLogonDate -lt (Get-Date).AddDays(-180)} | Remove-ADComputer -Confirm:$false

此命令删除 180 天未登录的计算机账户。

114. 查看和管理所有共享文件夹权限

PowerShell 示例:

powershellCopy Code
Get-SmbShare | Select-Object Name, Path, Description | Format-Table

此命令列出所有 SMB 共享,并显示共享名称、路径和描述信息。

115. 检查所有域控制器的站点配置

PowerShell 示例:

powershellCopy Code
Get-ADDomainController -Filter * | Select-Object Name, Site

此命令列出所有域控制器的站点信息。


总结

这些命令进一步扩展了对 Active Directory(AD)的管理,包括:

  • 账户和组管理:检查账户和组的状态、修改属性;
  • 域控制器管理:查看域控制器的状态、全局编录配置、健康状况等;
  • 计算机和登录管理:查看计算机的登录记录、查找未登录或过期的计算机账户;
  • 信任和安全配置:查看外部信任关系、时钟同步、权限管理等。

更多关于 Active Directory (AD) 管理和 PowerShell 使用的实用命令。

116. 查看所有用户的密码过期日期

PowerShell 示例:

powershellCopy Code
Get-ADUser -Filter * -Properties "PasswordLastSet" | Select-Object Name, PasswordLastSet, @{Name="PasswordExpiryDate";Expression={$_.PasswordLastSet.AddDays(90)}}

此命令会显示每个用户的密码上次设置日期以及密码的过期日期(默认是 90 天后),适用于监控密码过期情况。

117. 检查所有用户的帐户是否被锁定

PowerShell 示例:

powershellCopy Code
Get-ADUser -Filter * -Properties LockedOut | Where-Object {$_.LockedOut -eq $true} | Select-Object Name, LockedOut

此命令列出所有被锁定的用户账户。

118. 查询 Active Directory 中所有的组和组成员

PowerShell 示例:

powershellCopy Code
Get-ADGroup -Filter * | ForEach-Object {
    $group = $_
    Get-ADGroupMember -Identity $group | Select-Object @{Name="Group";Expression={$group.Name}}, Name
}

此命令列出所有组,并显示每个组的成员。

119. 列出所有域控制器的健康状况

PowerShell 示例:

powershellCopy Code
Get-ADDomainController -Filter * | Select-Object Name, IsGlobalCatalog, IsReadOnly, Site, OperatingSystem, LastLogonDate

此命令列出所有域控制器的健康状况,包含是否是全局编录、是否是只读域控制器、站点信息、操作系统版本和最后登录时间等。

120. 查询并列出所有被删除但仍在回收站中的对象

PowerShell 示例:

powershellCopy Code
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 示例:

powershellCopy Code
Get-ADComputer -Filter * -Properties OperatingSystem | Select-Object Name, OperatingSystem

此命令列出所有计算机及其操作系统版本,适用于监控计算机环境。

123. 列出所有邮箱启用的用户

PowerShell 示例:

powershellCopy Code
Get-ADUser -Filter {mail -like "*"} | Select-Object Name, mail

此命令列出所有启用邮箱的用户及其邮箱地址。

124. 查看所有用户的属性(例如登录名、邮箱、电话号码)

PowerShell 示例:

powershellCopy Code
Get-ADUser -Filter * -Properties SamAccountName, EmailAddress, OfficePhone | Select-Object Name, SamAccountName, EmailAddress, OfficePhone

此命令列出所有用户的登录名、邮箱地址和办公电话等基本信息。

125. 查看域中所有已过期的计算机账户

PowerShell 示例:

powershellCopy Code
Get-ADComputer -Filter {LastLogonDate -lt (Get-Date).AddDays(-180)} | Select-Object Name, LastLogonDate

此命令查找所有过去 180 天没有登录的计算机账户,适用于清理不再使用的计算机。

126. 添加用户到特定组

PowerShell 示例:

powershellCopy Code
Add-ADGroupMember -Identity "GroupName" -Members "johndoe"

此命令将用户 johndoe 添加到名为 "GroupName" 的组中。

127. 删除用户账户

PowerShell 示例:

powershellCopy Code
Remove-ADUser -Identity "johndoe" -Confirm:$false

此命令删除名为 johndoe 的用户账户,并跳过确认提示。

128. 查询 AD 中所有已存在的组织单位 (OU)

PowerShell 示例:

powershellCopy Code
Get-ADOrganizationalUnit -Filter * | Select-Object Name, DistinguishedName

此命令列出所有组织单位的名称和 Distinguished Name(DN)。

129. 查看域控制器的站点信息

PowerShell 示例:

powershellCopy Code
Get-ADDomainController -Filter * | Select-Object Name, Site

此命令列出所有域控制器及其所在的站点信息,适用于检查域控制器的站点配置。

130. 查找所有具有特定属性的用户

PowerShell 示例:

powershellCopy Code
Get-ADUser -Filter {Department -eq "Sales"} | Select-Object Name, Department

此命令查找部门为 "Sales" 的所有用户。

131. 查看并管理域信任关系

PowerShell 示例:

powershellCopy Code
Get-ADTrust | Select-Object Name, TrustType, Direction, TrustAttributes

此命令列出所有域之间的信任关系,包括信任类型、方向以及属性。

132. 设置用户账户密码永不过期

PowerShell 示例:

powershellCopy Code
Set-ADUser -Identity "johndoe" -PasswordNeverExpires $true

此命令将用户 johndoe 的密码设置为永不过期。

133. 查询特定域的所有信任关系

PowerShell 示例:

powershellCopy Code
Get-ADDomain -Identity "example.com" | Get-ADTrust | Select-Object Name, TrustType, Direction

此命令查询 example.com 域与其他域之间的所有信任关系。

134. 查看并修改用户的个人资料(如地址、职位等)

PowerShell 示例:

powershellCopy Code
Set-ADUser -Identity "johndoe" -StreetAddress "1234 Main St" -Title "Sales Manager"

此命令设置 johndoe 的街道地址和职位信息。

135. 检查并报告所有用户的组成员身份

PowerShell 示例:

powershellCopy Code
Get-ADUser -Filter * | ForEach-Object {
    $user = $_
    Get-ADUserMemberOf -Identity $user | Select-Object @{Name="UserName";Expression={$user.Name}}, Name
}

此命令列出所有用户及其所属的组信息。

136. 查看并列出所有域控制器的操作系统版本

PowerShell 示例:

powershellCopy Code
Get-ADDomainController -Filter * | Select-Object Name, OperatingSystem

此命令列出所有域控制器的操作系统版本,适用于管理多个域控制器的环境。


总结

这些高级命令进一步帮助您更好地管理 Active Directory 环境,涉及的内容包括:

  • 用户、组和计算机管理:包括查看、添加、删除用户账户和组成员,管理密码策略、登录信息、组织单位(OU)等。
  • 域控制器和站点管理:包括查看和管理域控制器的健康状况、时钟同步、操作系统等。
  • 信任关系和安全配置:查看域信任关系、信任类型、方向、域控制器的全局编录状态等。

 

posted @ 2025-01-24 03:48  suv789  阅读(154)  评论(0)    收藏  举报