Get-ADUser cmdlet 是一个非常通用的工具,用于获取活动目录用户。如果您需要识别特定的 AD 用户,您可以使用像他们的 SAM 帐户名这样的值来做到这一点。或者,当您需要一个或多个用户的详细信息时,您可以使用 Properties 参数。
同样,当您处理大量用户对象时,Filter 参数对于根据某些过滤器(如电子邮件、城市、标题等)获取 AD 用户很有用。结合排序和导出等工具,Get-ADUser 使用户域管理非常方便。
PowerShell 获取 ADUser 要求
在域控制器上,Get-ADUser 命令显然在默认情况下有效。但是,如果您尝试在属于AD 域的其他系统上运行此命令,您可能会遇到Get-ADUser is not recognized错误。
这是因为您必须先安装RSAT AD组件。您可以使用Add-WindowsCapability –online –Name "Rsat.ActiveDirectory.DS-LDS.Tools~~~~0.0.1.0"
. 执行此操作后,您可以在任何系统上使用 Get-ADUser。
您也不会仅限于域管理员帐户;任何授权的 AD 用户帐户都可以使用。要记住的一件事是,虽然非管理员帐户可以使用此命令检索大多数用户对象属性,但某些敏感信息可能只有域管理员才能访问。
获取 ADUser 参数
Get-ADUser 主要使用三个参数来检索用户对象——Identify、Filter 和 LDAPFilter。
Identity使用特定值(如可分辨名称或 GUID)检索用户对象。当您需要查找用户对象并记住所需的值时,这很有用。
过滤器根据所选查询返回用户对象列表。如果您需要获取密码已过期的 AD 用户,或者最近 2 周未登录的用户等,过滤器会很有用。您可以进一步将结果缩小到仅来自特定服务器、特定 OU 等的用户对象。
LDAPFilter还使用查询字符串来过滤用户对象。不同之处在于,与遵循 PowerShell 语法的 Filter 不同,LDAPFilter 使用自己的 LDAP 查询语法(属性和值)。这意味着它确实有一个轻微的学习曲线,但一旦你习惯了它,你就会发现它是一个有用的工具。
还有其他有用的参数,例如我们将在示例中介绍的SearchBase和SearchScope 。如果您想查看完整的参数列表,我们建议您参考 Microsoft 的文档,但前三个是我们将在本文中重点介绍的。
身份
Identity 使用以下属性之一返回单个 AD 用户对象:
- 专有名称 (DN)
- 对象GUID
- objectSid(SID,或安全标识符)
- 山姆账户名
假设您需要有关名为 Ava 的用户的详细信息。假设她的 SamAccountName 是 ava,您可以使用 检索用户对象Get-ADUser -Identity ava
。
不过,此命令仅返回 10 个主要属性。如果您需要用户对象的完整属性列表,您应该使用Get-ADUser -Identity ava -Properties
。
筛选
由于人们通常不记得 Identity 参数所需的属性值,因此 Filter 往往更常用。筛选器指定遵循PowerShell 表达式语言语法的查询字符串以检索 AD 用户对象。因此,运算符位于操作数和值之间。
一个基本示例是Get-AdUser -Filter "Name -like 'a'"
,其中 Name 是操作数,like 是运算符,a 是值。此命令返回名称中包含字母 a 的所有用户对象。
另一个有用的命令是Get-ADUser -Filter
检索所有 AD 对象。
现在,这是过滤器运算符的列表:
操作员 | 功能 |
---|---|
当量 | 等于 |
格 | 大于或等于 |
乐 | 小于或等于 |
无 | 不等于 |
大约 | 约等于 |
GT | 比...更棒 |
lt | 少于 |
喜欢 | 喜欢 |
不喜欢 | 不喜欢 |
和 | 所有条款必须为真 |
或者 | 任何条款都应该是真实的 |
不是 | 该条款必须是错误的 |
乐队 | 按位与 |
博尔 | 按位或 |
如前所述,usingGet-ADUser <user> -Properties
返回完整的属性列表。您可以检查此列表以了解可用于过滤输出的所有可接受的属性。但就目前而言,这里有一些常用的:
- 账户到期日
- 城市
- 公司
- 国家
- 国家代码
- 部门
- 描述
- 电子邮件地址
- 员工ID
- 员工编号
- 启用
- 缩写
- 登录次数
- 姓名
- 密码过期
- 山姆账户名
- 状态
- 标题
使用这些运算符和属性,您可以创建各种类型的过滤器。例如,要仅获取描述中包含 Tech 的用户,您可以使用Get-ADUser -Filter "Description -like 'Tech'"
. 要仅列出活跃的 AD 用户,您可以使用Get-ADUser -Filter 'Enabled -eq $true'
同样,您可以组合这些命令来列出在其描述中包含 Tech 的活动 AD 用户,如下所示: Get-ADUser -Filter {Description -like 'Tech' -and Enabled -eq $true}
使用非管理员帐户时,如果您没有执行任务的权限,则可能会遇到非终止错误。在这种情况下,您可以使用 Credential 选项以不同的凭据运行命令,例如: Get-ADUser -Filter -Credential ava
最后,由于 Filter 通常会返回大量 AD 对象,因此您可以通过指定所需的确切属性值来进一步优化输出。首先使用Properties参数检索值,然后使用Select-Object选项仅显示指定的属性。 Get-ADUser -Filter -Properties Name, Initials | Select-Object Name, Initials
LDAP过滤器
LDAP 子句遵循(ADAttribute 运算符值)格式。具体来说,它使用以下运算符:
操作员 | 功能 |
---|---|
= | 等于 |
>= | 大于或等于 |
<= | 小于或等于 |
~= | 约等于 |
& | 布尔与 |
| | 布尔或 |
! | 布尔非 |
让我们看一些基本的例子。以下命令返回名称以纪元结尾的 AD 对象: Get-ADUser -LDAPFilter "(name=era)"
要获取描述中不包含 Tech 的对象: Get-ADUser -LDAPFilter '(!(description=Tech))'
组合多个子句以便获得名称中带有 A 但描述中没有 Tech 的对象: Get-ADUser -LDAPFilter '(&(!(description=Tech))(cn=A))'
有用的 Get-ADUser 示例
此时您应该掌握基本的 Get-ADUser 用法。我们在此处列出了一些常见用例的更多示例,这些示例将演示其他有用的参数和场景。
- 要以表格格式获取输出,请使用 Format-Table 或 ft:
Get-ADUser -Filter | Format-Table
- 要从特定容器中获取对象,请使用 SearchBase:
Get-ADUser -Filter -SearchBase "OU=Cali,OU=Locations,DC=mylab,DC=local"
- 要仅将对象降低到 OU 层次结构的特定级别,请使用 SearchScope:
Get-ADUser -Filter -SearchBase "OU=Cali,OU=Locations,DC=mylab,DC=local" -SearchScope 1 | ft
- 要从特定域控制器获取对象,请使用服务器:
Get-ADUser –Server mylab.local –Identity ava
- 要获取未设置电话号码的用户,
Get-ADUser -LDAPFilter '(!phone=)'
- 要显示所有用户的电子邮件地址,
Get-ADUser -Filter -Properties Name, EmailAddress | select Name, EmailAddress
- 要将输出导出为文本,
Get-ADUser -filter -properties Name, PasswordLastSet | ft Name, PasswordLastSet > C:\pwddata.txt
- 要将输出导出为 CSV,
Get-ADUser -filter -properties Name, PasswordLastSet | select-object Name, PasswordLastSet | Export-csv -path C:\pwddata.csv -Append -Encoding UTF8