当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] Get-ADUser:使用 PowerShell 查找 Active Directory 用户信息

作者:精品下载站 日期:2024-12-14 23:13:11 浏览:14 分类:玩电脑

Get-ADUser:使用 PowerShell 查找 Active Directory 用户信息


Get-ADUser PowerShell cmdlet 允许您获取有关 Active Directory 用户及其属性的信息,并在域用户中进行搜索。它是用于从 AD 获取信息的更流行的 PowerShell cmdlet 之一。使用 Get-ADUser cmdlet,您可以获取 AD 用户帐户的任何属性的值、列出具有属性的域用户、将用户报告导出到 CSV 文件,以及使用各种条件来选择和筛选域用户。

Active Directory PowerShell 模块中的 Get-ADUser Cmdlet

Get-ADUser

cmdlet 包含在用于与 Active Directory 交互的特殊模块中 - Windows PowerShell 的 Active Directory 模块。 RSAT-AD-PowerShell 模块 cmdlet 使您能够对 AD 对象执行各种操作。

注意。以前,要获取有关 AD 用户帐户属性的信息,您必须使用不同的工具:ADUC 控制台(包括保存的 AD 查询)、VBS 脚本、dsquery 等。所有这些工具都可以轻松地由 Get-ADUser cmdlet 替换。

在此示例中,我们将展示如何使用 Get-ADUser PowerShell cmdlet 获取有关用户密码上次更改时间、密码过期时间以及其他用户属性的信息。

要使用 RSAT-AD-PowerShell 模块,您需要运行提升的 PowerShell 控制台并使用以下命令导入模块:

Import-Module ActiveDirectory

当您部署 Active Directory 域服务 (AD DS) 角色时,RSAT-AD-PowerShell 模块默认安装在 Windows Server 2012(及更高版本)上。要在域成员 Windows Server 主机上安装该模块,请运行以下命令:

Install-WindowsFeature -Name "RSAT-AD-PowerShell" -IncludeAllSubFeature

[玩转系统] Get-ADUser:使用 PowerShell 查找 Active Directory 用户信息

为了在桌面 Windows 10/11 上使用 Get-ADUser cmdlet,您需要安装适当版本的 RSAT。您可以通过设置 -> 应用 -> 可选功能 -> 添加功能 -> RSAT:Active Directory 域服务和轻量级目录服务工具启用 RSAT。

[玩转系统] Get-ADUser:使用 PowerShell 查找 Active Directory 用户信息

您可以使用 PowerShell 在 Windows 10 和 11 上安装 RSAT AD 模块:

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

如果计算机上未安装 RSAT-AD-PowerShell 模块,那么当您运行 Get-ADUser 命令时,会出现错误:

Get-ADUser: The term 'get-aduser' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again.

检查该模块是否已安装,如有必要,将其导入到您的 PowerShell 会话中:

Import-Module ActiveDirectory

[玩转系统] Get-ADUser:使用 PowerShell 查找 Active Directory 用户信息

还有一种方法可以使用 AD-PowerShell 模块,而无需在计算机上安装 RSAT。复制主模块文件并将模块导入 PowerShell 会话就足够了:

Import-Module "C:\PS\AD\Microsoft.ActiveDirectory.Management.dll"
Import-Module "C:\PS\AD\Microsoft.ActiveDirectory.Management.resources.dll"

可以按如下方式获取 Get-ADUser cmdlet 的所有参数的完整列表:

help Get-ADUser

如何使用 Get-ADUser 查找 AD 用户并列出属性?

要使用 Get-ADUser cmdlet,您无需在具有域管理员或委派权限的帐户下运行它。任何授权的 AD 域用户都可以运行 PowerShell 命令来获取大多数 AD 对象属性的值(机密属性除外,请参阅文章本地管理员密码解决方案 - LAPS 中的示例)。如果您需要在不同帐户下运行 Get-ADUser 命令,请使用 -Credential 参数。

要显示所有域用户帐户的列表,请运行以下命令:

Get-ADUser -filter *

重要。不建议在具有大量用户帐户的 Active Directory 域中运行此命令。这会给提供 AD 信息的域控制器带来沉重的负载。

[玩转系统] Get-ADUser:使用 PowerShell 查找 Active Directory 用户信息

使用 Set-ADUser cmdlet 更改 Active Directory 用户属性。

要显示特定用户的属性,请使用

-Identity

范围。身份可以是用户名、登录名 (SAMAccountName)、DN(专有名称)、SID 或 GUID。

对于同一 AD 用户帐户,以下 PowerShell 命令将返回相同的结果:

Get-ADUser -Identity b.smith
Get-ADUser -Identity "CN=Brian Smith,OU=Users,OU=Berlin,DC=a-d,DC=loc"
Get-ADUser -Identity "Brian Smith"

[玩转系统] Get-ADUser:使用 PowerShell 查找 Active Directory 用户信息

默认情况下,Get-ADUser cmdlet 仅返回 10 个基本用户属性(超过 120 个用户帐户属性):DistinguishedName、SamAccountName、Name、SID、UserPrincipalName、ObjectClass、帐户状态(启用:根据 UserAccountControl AD 属性为 True/False)等。在这种情况下,cmdlet 的输出不包含有关上次用户密码更改时间的信息。

要在特定域控制器上执行 AD 查询,请使用 -Server 选项:

Get-ADUser -Server DC01.a-d.site -Identity tstuser

如果需要从另一个 AD 域获取用户数据,则需要指定域控制器名称和凭据来访问它:

$ADcred = Get-Credential
Get-ADUSer tstuser -Server DC01.contoso.com -Credential $ADcred

要显示有关所有可用用户属性的详细信息,请运行以下命令:

Get-ADUser -identity tuser -properties *

[玩转系统] Get-ADUser:使用 PowerShell 查找 Active Directory 用户信息

带有 Properties * 开关的 Get-ADUser cmdlet 会列出所有 AD 用户的属性及其值(包括空属性)。 Active Directory 用户和计算机图形管理单元中提供了类似的用户属性列表 (

dsa.msc

)在属性编辑器选项卡下。

然后我们将格式化 Get-ADUser 输出,以便显示必要的用户属性。例如,您想要显示以下用户属性的值:

  • 密码已过期

  • 密码上次设置

  • 密码永不过期

  • 上次登录时间戳

运行命令:

Get-ADUser tuser -properties PasswordExpired, PasswordLastSet, PasswordNeverExpires, lastlogontimestamp

[玩转系统] Get-ADUser:使用 PowerShell 查找 Active Directory 用户信息

现在,在用户数据中,包含有关帐户密码状态(过期:True/False)、上次密码更改日期以及上次用户登录域的时间的信息(

lastlogontimestamp

属性)。要在更方便的表格视图中显示此信息并删除所有不必要的属性,请使用Select-Object -PropertyFormat-Table

Get-ADUser -filter * -properties PasswordExpired, PasswordLastSet, PasswordNeverExpires | ft Name, PasswordExpired, PasswordLastSet, PasswordNeverExpires

[玩转系统] Get-ADUser:使用 PowerShell 查找 Active Directory 用户信息

Get-ADUser -SearchBase:从特定 OU 获取用户

要仅显示特定域容器(组织单位)中的用户,请使用 -SearchBase 参数:

Get-ADUser -SearchBase 'OU=London,DC=a-d,DC=loc' -filter * -properties PasswordExpired, PasswordLastSet, PasswordNeverExpires | ft Name, PasswordExpired, PasswordLastSet, PasswordNeverExpires

如果您需要一次从多个 OU 选择用户,请使用以下 PowerShell 脚本:

$OUs = "OU=NY,DC=a-d,DC=com","OU=LA,DC=a-d,DC=com","OU=MA,DC=a-d,DC=com"
$OUs | foreach {Get-ADUser -SearchBase $_ -Filter * |select Name, Enabled}

如何使用 PowerShell 从 AD 获取用户的电子邮件地址?

用户电子邮件地址是 Active Directory 中的用户对象属性之一。要列出用户的电子邮件地址,您必须将 EmailAddress 字段添加到 Get-ADUser cmdlet 的属性中。

Get-ADUser -filter * -properties EmailAddress -SearchBase 'OU=Paris,OU-Fr,DC=a-d,DC=com'| select-object Name, EmailAddress

[玩转系统] Get-ADUser:使用 PowerShell 查找 Active Directory 用户信息

具有电子邮件地址的已启用用户帐户的列表:

Get-ADUser -Filter {(mail -ne "null") -and (Enabled -eq "true")} -Properties Surname,GivenName,mail | Select-Object Name,Surname,GivenName,mail | Format-Table

要获取没有电子邮件地址的 Active Directory 用户列表:

Get-ADUser -Filter * -Properties EmailAddress | where -Property EmailAddress -eq $null

以下示例允许您将公司电子邮件列表从 AD 导出到 CSV 文件。稍后,您可以将此 CSV 地址列表导入桌面电子邮件客户端,例如 Outlook 或 Mozilla Thunderbird:

Get-ADUser -Filter {(mail -ne "null") -and (Enabled -eq "true")} -Properties Surname,GivenName,mail | Select-Object Name,Surname,GivenName,mail | Export-Csv -NoTypeInformation -Encoding utf8 -delimiter "," $env:temp\adress_list.csv

Get-ADUser:使用 PowerShell 将 Active Directory 用户导出到 CSV

具有属性的域用户的结果列表可以导出到文本文件:

Get-ADUser -filter * -properties PasswordExpired, PasswordLastSet, PasswordNeverExpires | ft Name, PasswordExpired, PasswordLastSet, PasswordNeverExpires > C:\temp\users.txt

或者您可以将 AD 用户列表导出到 CSV 文件:

Get-ADUser -filter * -properties PasswordExpired, PasswordLastSet, PasswordNeverExpires | where {$_.name -like "*Dmitry*"} | sort-object PasswordLastSet | select-object Name, PasswordExpired, PasswordLastSet, PasswordNeverExpires | Export-csv -path c:\tmp\user-passwords-expires.csv -Append -Encoding UTF8

AD用户列表可以使用PowerShell直接导出到Excel文件。

Get-ADUser 过滤器示例

使用-过滤器开关,您可以按一个或多个属性过滤用户帐户列表。这对于搜索属性与指定条件匹配的 AD 用户非常有用。 Active Directory 用户的特定属性值可以指定为此参数的参数。当您使用

-Filter

参数时,Get-ADUser cmdlet 将仅显示符合筛选条件的用户。

例如,我想列出名称包含“Dmitry”的活动(已启用)用户帐户。下面的例子使用了多个过滤器;您可以使用逻辑 PowerShell 比较运算符组合条件。在此示例中,用户属性必须满足两个过滤条件(-和):

Get-AdUser -Filter "(Name -like '*Dmitry*') -and (Enabled -eq 'True')" -Properties * |select name,enabled

[玩转系统] Get-ADUser:使用 PowerShell 查找 Active Directory 用户信息

所有 PowerShell 逻辑运算符均可用于选择用户属性的值 (

-eq

,

-ne

,

-gt

,

-ge

,

-lt

,

-le

,

-like

,

-notlike

,

-and

,

-or

, ETC。)

此外,您还可以使用 Sort-Object cmdlet 按特定用户属性对结果用户列表进行排序。您还可以使用 Where-Object cmdlet 一次指定多个过滤条件。

Get-ADUser -filter * -properties PasswordExpired, PasswordLastSet, PasswordNeverExpires -SearchBase 'OU=NY,DC=a-d,DC=com'| where {$_.name -like "*Dmitry*" -and $_.Enabled -eq $true} | sort-object PasswordLastSet | select-object Name, PasswordExpired, PasswordLastSet, PasswordNeverExpires

[玩转系统] Get-ADUser:使用 PowerShell 查找 Active Directory 用户信息

因此,您可以获得具有任何必要的 Active Directory 属性的用户列表。

要同时按多个属性(legacyExchangeDN、proxyAddresses、SAMAccountName、Surname、DisplayName、SamAccountName、physicalDeliveryOfficeName、RDN 和 msExchMailNickname)搜索用户,您可以使用模糊名称解析 (

ANR

) 特征:

Get-ADUser -Filter {anr -eq 'John'} | select Name

提示。使用 Get-ADUser 查找 Active Directory 用户时,从性能角度来看,使用 Filter 属性指定条件优于使用 Where-Object cmdlet 的管道。在这种情况下,选择结果的过滤将在域控制器上执行,并且较小的数据集将通过网络传输到您的计算机。

您可以在 Get-ADUser 查询中使用 LDAP 筛选器。 LDAP 过滤器是使用-LdapFilter 属性指定的。

Get-ADUser -LDAPFilter '(&(department=it)(title=sysops))'

PowerShell 获取 ADUser 示例

让我们展示一些更有用的 PowerShell 命令示例,用于使用各种过滤器查询 Active Directory 用户。您可以将它们组合起来以获得所需的 AD 用户对象列表:

显示名称以 Joe 开头的 AD 用户:

Get-ADUser -filter {name -like "Joe*"}

您可以使用 PowerShell 计算 Active Directory 中的用户帐户总数:

Get-ADUser -Filter {SamAccountName -like "*"} | Measure-Object

查找禁用的 Active Directory 用户帐户:

Get-ADUser -Filter {Enabled -eq "False"} | Select-Object SamAccountName,Name,Surname,GivenName | Format-Table

您可以使用以下命令检查 Active Directory 用户帐户创建日期:

get-aduser -Filter * -Properties Name, WhenCreated | Select name, whenCreated

您可以获取过去 24 小时内新创建的 Active Directory 用户的列表:


$lastday = ((Get-Date).AddDays(-1))
Get-ADUser -filter {(whencreated -ge $lastday)}

列出密码过期的帐户(您可以在域密码策略中配置密码过期选项):

Get-ADUser -filter {Enabled -eq $True} -properties name,passwordExpired| where {$_.PasswordExpired}|select name,passwordexpired

您可以使用 Get-ADUser 和 Add-ADGroupMember cmdlet 创建动态 AD 用户组(取决于城市、职位、部门等)。

任务:对于存储在文本文件中的用户帐户列表(每行一个帐户),您需要从 AD 中获取用户的公司名称并将其保存到 CSV 文件(您可以轻松地将此 CSV 文件导入到 Excel 中)。

Import-Csv c:\ps\users_list.csv | ForEach {
Get-ADUser -identity $_.user -Properties Name, Company |
Select Name, Company |
Export-CSV c:\ps\users_ad_list.csv -Append -Encoding UTF8
}

过去 90 天内未更改域密码的用户:

$90_Days = (Get-Date).adddays(-90)
Get-ADUser -filter {(passwordlastset -le $90_days)}

查找不活动的用户帐户(超过 180 天未登录域)。 lastLogonTimestamp 属性用于获取用户的域登录历史记录:

$LastLogonDate= (Get-Date).AddDays(-180)
Get-ADUser -Properties LastLogonTimeStamp -Filter {LastLogonTimeStamp -lt $LastLogonDate } | ?{$_.Enabled -eq $True} |  Sort LastLogonTimeStamp| FT Name, @{N='lastlogontimestamp'; E={[DateTime]::FromFileTime($_.lastlogontimestamp)}} -AutoSize

要从 Active Directory 获取用户的照片并将其保存到 jpg 文件,请运行以下命令:

$usr = Get-ADUser sjoe -Properties thumbnailPhoto
$usr.thumbnailPhoto | Set-Content sjoe.jpg -Encoding byte

要获取用户帐户所属的 AD 组列表:

Get-AdUser sjoe -Properties memberof | Select memberof -expandproperty memberof

列出 OU 中属于特定域安全组成员的用户:

Get-ADUser -SearchBase 'OU=Rome,OU=Italy,DC=a-d,DC=com' -Filter * -properties memberof | Where-Object {($_.memberof -like "*CEO*")}

列出 OU 中属于特定域安全组成员的用户:

Get-ADUser -SearchBase 'OU=Rome,OU=Italy,DC=a-d,DC=com' -Filter * -properties memberof | Where-Object {($_.memberof -like "*CEO*")}

列出 OU 中的所有用户,特定组的成员除外:

$Users = Get-ADUser -filter * -SearchBase ‘OU=Berlin,DC=a-d,DC=com’ -properties memberOf
ForEach ($User In $Users)
{
$Groups = -join @($User.memberOf)
If ($Groups -notlike '*Domain Admins*')
{
$User.Name
}
}

将具有组织单位名称的 AD 用户列表导出到 Out-GridView 表:

get-aduser -filter * -Properties cn,canonicalname | select name,userprincipalname,@{Name="OU";expression={$_.Canonicalname.substring(0,$_.canonicalname.length-$_.cn.length)}}| Out-GridView

[玩转系统] Get-ADUser:使用 PowerShell 查找 Active Directory 用户信息

检查AD用户帐户是否存在:

$SamAccountName='jbrown'
if (@(Get-ADUser -Filter { SamAccountName -eq $SamAccountName }).Count -eq 0)
{  Write-Host "User $SamAccountName doesn’t exist"}

列出允许用户登录的域计算机(通过 LogonWorkstations AD 属性进行登录限制)。

Get-ADUser jbrown -Properties LogonWorkstations | Format-List Name, LogonWorkstations

提示。 Get-ADComputer cmdlet 用于获取计算机属性或从 Active Directory 搜索多台计算机。

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯