Get-AdUser:如何使用PowerShell审计Active Directory用户

PowerShell 是IT管理员的必备工具,它可以通过Get-AdUser命令轻松审计Active Directory用户账户。在本指南中,我们将详细介绍如何开始使用备受欢迎的Active Directory cmdlet。

介绍Get-AdUser PowerShell cmdlet

Get-AdUser cmdlet是最受欢迎的Active Directory PowerShell cmdlet之一。它允许您获取指定的用户对象,或者执行可自定义搜索以获取多个用户对象。

广告

Identity参数用于指定要获取的Active Directory用户。您有多种选项来识别用户:

  • 您可以使用其专有名称(DN)、GUID、安全标识符(SID)或安全账户管理器(SAM)帐户名。
  • 您还可以将参数设置为用户对象变量,如$UserA,或将用户对象传递到Identity参数。

您可以使用FilterLDAPFilter参数搜索并获取多个用户,Filter参数使用PowerShell Expression Language(PSL)来查询Active Directory。

PowerShell表达式语言的语法为管理员提供了丰富的类型转换支持,用于Filter参数接受的值类型。如果您已经有轻量级目录访问协议(LDAP)查询字符串,请改用LDAPFilter参数。

如果没有显式设置参数,Get-AdUser将显示一组默认的用户对象属性。要检索其他属性,请使用Properties参数。我们将在本文后面介绍一些您可以使用的参数。

广告

如何使用Get-AdUser及先决条件

在使用Get-AdUser和其他与Active Directory相关的PowerShell命令之前,您需要确保Active Directory模块已安装并加载到您的工作站上。根据您正在运行的Windows版本,有各种方法可以安装该命令。

为了简洁起见,我将介绍您作为管理员或IT专业人员可能遇到的两种最常见的方法来管理您的本地Active Directory。

首先,您可以使用以下PowerShell命令直接从Windows Update安装远程服务器管理工具(RSAT)工具。

Add-WindowsCapability –online –Name "Rsat.ActiveDirectory.DS-LDS.Tools~~~~0.0.1.0"

第二种方法是使用设置应用程序直接安装 RSAT 工具。 点击 开始-> 设置 -> 应用 -> 可选功能 -> 添加功能 -> 并在RSAT: Active Directory 域服务和轻量级目录服务工具 选项中打勾。

广告

点击安装按钮。

如何使用 -Identity 参数查找 AD 用户帐户

好的,让我们开始使用 cmdlet,并展示如何帮助您更加熟练(和更快!)地获取您需要的信息。我正在我的(Windows Server 2022 Active Directory)Hyper-V 实验环境中工作,并登录到 Windows 10 21H1 客户端虚拟机(VM)。我在“开始菜单”中搜索“Active Directory Module for Windows PowerShell”,并通过“以管理员身份运行”打开它。

Active Directory Module for Windows PowerShell

首先,让我根据sAMAccountName属性查找一个域用户

Get-ADUser breinders
Finding a user account via their sAMAccountName

这样就行了。现在,我们可以使用objectGUID(或 GUID)属性来查找用户。让我们试试:

Get-ADUser bdcaaf45-e993-4be7-83d2-c1d280edc250
Finding an account via their objectGUID (GUID)

哦,同一个用户帐户。太好了。我们还可以根据他们的安全标识符或SID来搜索用户。

Get-ADUser S-1-5-21-3437955921-3370966048-1812589592-1107
Finding an account via their Security IDentifier (SID)

是的,有点重复,但你明白我的意思。您还可以使用用户的姓氏、名字、UserPrincipalName等。

使用Get-AdUser过滤器

在较大的环境中,我不建议单独输入“Get-AdUser”,因为这将开始检索所附AD域中的所有用户对象。这不仅会开始在控制台中充斥着数据,还可能对您的工作站正在使用的任何一个域控制器造成明显的负担。

要是我们能够过滤掉整个用户基础并根据某些属性搜索特定用户该多好。这正是“-filter”参数的作用所在!

“-filter”参数指定检索AD对象的查询字符串。此字符串使用PowerShell表达式语言(PEL)语法。PEL语法提供对由Filter参数接收的值类型的丰富类型转换支持。该语法使用按顺序表示,这意味着在操作数和值之间放置操作符。让我们通过一些示例来更好地理解。

首先,让我们发现所有处于“启用”状态的帐户。

Get-ADUser -filter {Enabled -eq "true"} | ft
Locating all the enabled accounts

我们正在使用那个可爱的PEL语法来查找所有’Enabled’字段等于True的帐户。我们还正在使用Format-Table PowerShell cmdlet来输出结果,以便更易于阅读。

接下来,让我们显示所有带有电子邮件地址的用户。

Get-ADUser -Filter {mail -ne "null"} -Properties Name,GivenName,mail| ft Name,GivenName,mail
Finding all the user accounts with an email address

首先,请注意我们正在使用“-filter”参数,仅包括没有空电子邮件地址的用户帐户。或者更简单地说,所有带有电子邮件地址的帐户。我知道,有时试图像计算机那样思考很困难。

其次,我们关注三个属性名称、名字和邮件(电子邮件地址)。我们使用Format-Table并列出这些属性。易如反掌!

您还可以从安全角度审计您的帐户。您还可以使用“-filter”参数查找所有具有“passwordneverexpires”属性的帐户。这通常是建议的。

Get-AdUser where name like?

另一个很酷的功能是使用各种参数与-filter一起,以仅查找与AD用户对象的各种属性匹配的特定用户。尽管我的实验环境非常小,只有大约十个用户帐户,但仍然可以展示您快速找到所需帐户的强大和灵活性。在这里,让我们找到所有名称中带有“Reinders”的用户。

Get-ADUser -Filter {name -like "*Reinders*"} -Properties * | ft Name,EmailAddress

我们正在使用“Name”参数,并查找所有姓名中包含“Reinders”的帐户。它可以是他们的名字,姓氏,甚至是中间名(如果输入了)。如果你只想找到姓氏是Reinders的用户,将-like字段更改为“*Reinders”。(注意,字段末尾没有星号(*)。

通过组织单位限制Get-AdUser搜索范围

如果你的域/企业相对较大,运行这些命令时可能会遇到较长的查询时间,或者对域控制器造成不必要的性能影响。让我们讨论如何将这些搜索范围限制到特定的组织单位(OU)

我们可以使用“-SearchBase”参数,并使用以下语法指定OU(或多个OU)。

Get-ADUser -SearchBase 'OU="Test Users",DC=reinders,DC=local' -filter * -Properties Name,EmailAddress | ft Name,EmailAddress
Here, we’re limiting the search scope to the ‘Test Users’ Organization Unit (OU)

在这里,我们将范围限制为“测试用户”OU中的所有用户,然后以表格格式输出他们的姓名和电子邮件地址。

使用具有替代凭据的Get-AdUser

默认情况下,Get-AdUser cmdlet是在当前登录用户的上下文中运行的。如果你想要使用替代凭据运行命令,你可以使用一个变量,将替代凭据存储在该变量中,然后使用“-Credential”开关运行命令。

$cred = Get-Credential Get-ADUser -Credential $cred -Filter {name -like "*Reinders*"} -Properties * | ft Name,EmailAddress

同样,简单明了!

使用 Get-AdUser Properties 参数

I’ve shown a few examples of the ‘-Properties’ parameter, but let’s take a step back and explain it a bit.

‘-Properties’ 参数指定要从服务器检索的输出对象的属性。默认情况下,如果不使用它,将返回和显示十个属性。例如DistinguishedName,帐户是“Enabled”还是“Disabled”,用户的GivenName,Name,GUID以及其他更类似系统的属性。但有很多可用的属性。使用此参数检索默认设置中未包含的属性。

将此参数的属性指定为逗号分隔的名称列表。要显示在对象上设置的所有属性,请指定*(星号)。

要访问这些其他属性,只需指定它;使用属性的名称。对于不是默认或扩展属性的属性,必须指定属性的轻量级目录访问协议(LDAP)显示名称。

让我们通过一些示例来看看。

Get-ADUser -filter * -Properties Name,PasswordLastSet | ft Name,PasswordLastSet
Displaying all users with the date and time their password was last set/reset

上面的示例显示了域中所有用户及其名称以及上次设置/重置密码的日期/时间。

Get-ADUser -filter * -Properties Name,whencreated | ft Name,WhenCreated
Another nice feature is listing every user’s Creation Date in Active Directory

显示帐户在Active Directory中的创建时间。让我们用一个查询来完成,为每个帐户获取名称、部门和经理。

Get-ADUser -filter * -Properties Name,Department,Manager | ft Name,Department,Manager
Listing the Department and the Manager of each user, if they’re populated in Active Directory

一最后的示例和使用Export-Csv命令的绝佳方法。如果您需要获取域中所有用户的清单,并包含所有属性,可以运行此命令将所有内容导出到方便的CSV文件。

Get-ADUser -filter * -properties * | Export-CSV c:\temp\Users.csv

概要

I hope you gained some knowledge about how to use the Get-AdUser PowerShell command. This really scratches the surface, however, this is one aspect I like about the power of PowerShell: Learning about the core properties of a cmdlet and extrapolating it out to your organization.

通常,想到许多用例可以利用此命令解决问题,为其他工程师创建一些文档,并协助进行整体故障排除过程是非常容易的。它非常方便。当然,使用一些这些命令生成 PowerShell 脚本… 总是可以提高效率!

欢迎在下方留下任何问题或评论。

相关文章:

Source:
https://petri.com/get-aduser-how-to-audit-active-directory-users-with-powershell/