Windows AD PowerShell(一):用户与账户

1911 字
10 分钟
Windows AD PowerShell(一):用户与账户

这是 Windows AD PowerShell 学习记录的第一节,主要整理用户账户的查询、属性筛选、状态管理和常见登录故障排查。

一、用户与账户#

Get-ADUser部分
#

1.1 查询用户的基本信息#

Terminal window
# 查单个用户的基本信息
Get-ADUser -Identity qianyue -Properties *
# 以下仅节选部分输出
DistinguishedName : CN=浅月,OU=User,OU=Admin,OU=Organization,DC=qy,DC=net
Enabled : True
GivenName : 月
Name : 浅月
ObjectClass : user
ObjectGUID : a050d085-d8dd-4065-903b-452e9fbb7a75
SamAccountName : qianyue
SID : S-1-5-21-2772337105-4098782075-1994570761-1116
Surname : 浅
UserPrincipalName : qianyue@qy.net

这里可以看到很多数据,让我们一个个来分析:

属性含义值
DistinguishedName用户在 Active Directory 中的唯一辨识名称,包含完整的组织单位路径CN=浅月,OU=User,OU=Admin,OU=Organization,DC=qy,DC=net
Enabled用户账户是否启用,True 表示启用,False 表示禁用True
GivenName用户的名字或名月
NameAD 对象名称,通常对应 DistinguishedName 中的 CN 部分浅月
ObjectClassAD 对象类型,user 表示这是一个用户对象user
ObjectGUIDAD 为该对象分配的全局唯一标识符,即使用户改名也通常保持不变a050d085-d8dd-4065-903b-452e9fbb7a75
SamAccountName用户登录名,主要用于兼容旧版 Windows/NT 域登录qianyue
SIDWindows 安全标识符,用于唯一标识用户并进行权限判断S-1-5-21-2772337105-4098782075-1994570761-1116
Surname用户的姓浅
UserPrincipalName用户主体名称,常用的现代域登录格式,通常类似电子邮箱地址qianyue@qy.net

1.2 查询符合 Filter 参数的用户#

顺带学习 Filter 参数的用法。

Terminal window
# 查所有启用的用户
Get-ADUser -Filter 'Enabled -eq $true'
# 按名字模糊查
Get-ADUser -Filter 'Name -like "*浅月*"'

-Filter 后面是一个筛选表达式,通常由“属性、比较运算符和值”组成。-eq 表示精确相等;-like 表示按照通配符匹配,其中 * 代表任意数量的字符。

需要注意,-like 只会检查表达式中明确指定的属性。例如 Name -like "*浅月*" 只会检查 Name,不会自动检查其他属性。

1.3 使用 Properties 提供需要额外返回的属性#

Terminal window
# 推荐:直接查询密码永不过期的用户
Search-ADAccount -PasswordNeverExpires -UsersOnly
# 进阶:通过 userAccountControl 位标志查询
Get-ADUser -Filter 'userAccountControl -band 0x10000' -Properties userAccountControl
# 示例一条:
DistinguishedName : CN=浅月,OU=User,OU=Admin,OU=Organization,DC=qy,DC=net
Enabled : True
GivenName : 月
Name : 浅月
ObjectClass : user
ObjectGUID : a050d085-d8dd-4065-903b-452e9fbb7a75
SamAccountName : qianyue
SID : S-1-5-21-2772337105-4098782075-1994570761-1116
Surname : 浅
userAccountControl : 66048
UserPrincipalName : qianyue@qy.net

-Properties 用来指定 Get-ADUser 需要额外查询并返回哪些用户属性,-Filter 用来筛选用户,两者通常配合使用。例如上述命令通过 -Filter 判断 userAccountControl 中的密码永不过期标志,并通过 -Properties 返回该属性。

userAccountControl 是由多个状态位组合而成的数值。示例中的 66048 不只代表单一状态,因此需要通过位运算判断其中是否包含指定标志。

1.4 配合管道与 Select-Object 来筛选需要的对象#

Terminal window
# 查询指定 OU 下的所有用户,并仅返回 Name
Get-ADUser -SearchBase "OU=User,OU=Admin,OU=Organization,DC=qy,DC=net" -Filter * |
Select-Object Name
Name
----
浅月

Search-ADAccount部分
#

1.5 根据账户状态进行查询#

Terminal window
# 查锁定中的账户
Search-ADAccount -LockedOut -UsersOnly
# 查密码已过期的账户
Search-ADAccount -PasswordExpired -UsersOnly
# 查已禁用的账户
Search-ADAccount -AccountDisabled -UsersOnly
# 查超过 90 天未登录的用户
Search-ADAccount -AccountInactive -TimeSpan 90.00:00:00 -UsersOnly

Search-ADAccount 用于按照账户状态进行搜索。如果不指定 -UsersOnly 或 -ComputersOnly,结果中可能同时包含用户账户和计算机账户。

常见的返回属性包括:

属性含义
AccountExpirationDate账户过期时间
DistinguishedName对象在 AD 中的完整路径
Enabled账户是否启用
LastLogonDate最近一次登录时间
LockedOut账户是否被锁定
Name对象名称
ObjectClass对象类型,例如 user 或 computer
ObjectGUID对象的全局唯一标识符
PasswordExpired密码是否已经过期
PasswordNeverExpires密码是否永不过期
SamAccountName旧式 Windows 登录名
SID安全标识符
UserPrincipalName用户主体名称,例如 qianyue@qy.net

1.6 对帐户执行修改的操作#

Terminal window
# 启用/禁用账户
Enable-ADAccount -Identity qianyue
Disable-ADAccount -Identity qianyue
# 解锁账户
Unlock-ADAccount -Identity qianyue
# 重置密码
$newPassword = Read-Host "请输入新密码" -AsSecureString
Set-ADAccountPassword -Identity qianyue -Reset -NewPassword $newPassword
# 取消密码永不过期
Set-ADUser -Identity qianyue -PasswordNeverExpires $false
# 强制下次登录改密码
Set-ADUser -Identity qianyue -ChangePasswordAtLogon $true
# 移动用户到另一个 OU
Get-ADUser -Identity qianyue |
Move-ADObject -TargetPath "OU=NewOU,DC=qy,DC=net"

密码不应该以明文形式直接写入脚本或命令历史,因此这里使用 Read-Host -AsSecureString 安全地读取密码。管理员重置密码时,需要给 Set-ADAccountPassword 添加 -Reset 参数。

在移动、禁用等可能影响用户登录的操作前,可以先使用 -WhatIf 预览将要执行的操作:

Terminal window
Get-ADUser -Identity qianyue |
Move-ADObject -TargetPath "OU=NewOU,DC=qy,DC=net" -WhatIf

另外,设置“下次登录必须修改密码”前,应确保已经取消“密码永不过期”:

Terminal window
Set-ADUser -Identity qianyue -PasswordNeverExpires $false
Set-ADUser -Identity qianyue -ChangePasswordAtLogon $true

1.7 修改用户的常用属性#

除了账户状态,还可以使用 Set-ADUser 修改显示名称、部门、职位和描述等属性:

Terminal window
Set-ADUser -Identity qianyue `
-DisplayName "浅月" `
-Department "IT" `
-Title "系统管理员" `
-Description "AD 测试账户"

修改完成后,可以重新查询并通过 Select-Object 查看结果:

Terminal window
Get-ADUser -Identity qianyue `
-Properties DisplayName,Department,Title,Description |
Select-Object SamAccountName,DisplayName,Department,Title,Description

常见的用户资料属性如下:

属性含义
DisplayName用户的显示名称,常用于管理界面和通讯簿
Department用户所在部门
Title用户的职位
Description用户对象的说明信息
Office用户所在办公室
EmailAddress用户的电子邮件地址
Manager用户的直属负责人

1.8 设置账户过期时间#

对于临时账户,可以设置明确的过期时间:

Terminal window
# 设置账户过期时间
Set-ADAccountExpiration -Identity qianyue -DateTime "2026-12-31 23:59:59"
# 取消账户过期时间
Clear-ADAccountExpiration -Identity qianyue

查询账户过期时间:

Terminal window
Get-ADUser -Identity qianyue -Properties AccountExpirationDate |
Select-Object Name,Enabled,AccountExpirationDate

1.9 管理用户的组成员关系#

AD 中的权限通常通过组进行分配,因此组成员关系也是用户管理的重要部分。

Terminal window
# 将用户添加到组
Add-ADGroupMember -Identity "Domain Admins" -Members qianyue
# 查看用户所属的组
Get-ADPrincipalGroupMembership -Identity qianyue |
Select-Object Name,GroupScope,GroupCategory
# 将用户从组中移除
Remove-ADGroupMember -Identity "Domain Admins" -Members qianyue -Confirm

Domain Admins 是高权限组,上述命令只适合在实验环境中练习。生产环境中应遵循最小权限原则,并在修改前确认操作对象。

1.10 创建新的用户账户#

可以使用 New-ADUser 创建用户,并同时设置初始密码、UPN 和所在 OU:

Terminal window
$password = Read-Host "请输入初始密码" -AsSecureString
New-ADUser `
-Name "浅月" `
-GivenName "月" `
-Surname "浅" `
-SamAccountName "qianyue" `
-UserPrincipalName "qianyue@qy.net" `
-Path "OU=User,OU=Admin,OU=Organization,DC=qy,DC=net" `
-AccountPassword $password `
-Enabled $true `
-ChangePasswordAtLogon $true

创建后可以立即进行验证:

Terminal window
Get-ADUser -Identity qianyue -Properties DisplayName,Created |
Select-Object Name,SamAccountName,Enabled,Created

1.11 用户无法登录的排查流程#

当用户反馈无法登录时,可以依次检查账户是否启用、是否被锁定、密码是否过期以及账户本身是否过期。

Terminal window
# 获取账户主要状态
Get-ADUser -Identity qianyue `
-Properties LockedOut,PasswordExpired,PasswordNeverExpires,AccountExpirationDate,LastLogonDate |
Select-Object Name,Enabled,LockedOut,PasswordExpired,PasswordNeverExpires,AccountExpirationDate,LastLogonDate

可以按照以下顺序进行判断:

  1. 检查 Enabled 是否为 True。
  2. 检查 LockedOut 是否为 True。
  3. 检查 PasswordExpired 是否为 True。
  4. 检查 AccountExpirationDate 是否已经超过当前时间。
  5. 检查用户对象所在 OU 和所属组是否正确。
  6. 根据问题执行启用、解锁或重置密码操作。
  7. 再次运行查询命令,确认账户已经恢复正常状态。

例如,对锁定账户执行解锁并验证:

Terminal window
Unlock-ADAccount -Identity qianyue
Get-ADUser -Identity qianyue -Properties LockedOut |
Select-Object Name,Enabled,LockedOut

需要注意,LastLogonDate 通常根据可复制的 lastLogonTimestamp 转换而来,适合判断长期未使用的账户,但不适合用作精确到分钟的登录审计记录。


下一篇:Windows AD PowerShell(二):组与成员

支持与分享

如果这篇文章对你有帮助,欢迎分享给更多人或打赏支持!

打赏
Windows AD PowerShell(一):用户与账户
https://springtsuki.xucjno.com/posts/springtsuki/notes/windowsad/powershell/915-user/
作者
SpringTsuki
发布于
2026-09-15
许可协议
CC BY-NC-SA 4.0
Profile Image of the Author
SpringTsuki
你好,我是浅月。
公告
浅月的开发小窝!欢迎你来到这里!
音乐
封面

音乐

暂未播放

0:000:00
暂无歌词
分类
标签
站点统计
文章
56
分类
9
标签
42
总字数
188,888
运行时长
0 天
最后活动
0 天前
站点信息
构建平台
GitHub Actions
博客版本
Firefly v6.13.5
文章许可
CC BY-NC-SA 4.0

文章目录