命令是干什么的
Get-LocalUser 是 Windows 本地账户的对象化查询入口:一次拿到启用状态、上次登录、上次设置密码时间与密码到期时间,可直接筛选、排序、导出 CSV。它取代了 net user 的文本解析思路,适合审计脚本与批量巡检;域账户不在其范围内,域内请改用 Get-ADUser。
和 net user 的区别
net user 输出的是文本,需要正则解析且字段顺序随版本变化;Get-LocalUser 返回对象,字段可直接访问、筛选与序列化,写自动化脚本更可靠。两者覆盖的是同一份本机账户数据(本地 SAM 数据库),差别在取数方式而非范围。
Get-LocalUser 只覆盖本机账户:域账户、Azure AD 账户以及服务运行上下文使用的虚拟账户都不在其中,跨范围清点要分别用对应命令。
基本信息
| 适用平台 | Windows 10 1607 及以后、Server 2016 及以后,PowerShell 5.1+ |
|---|---|
| 权限要求 | 枚举本机账户普通用户即可,增删改需管理员 |
| 语法 | Get-LocalUser [-Name 账户名] | Where-Object { ... } |
| 相关命令 | New-LocalUser、Enable-LocalUser、Set-LocalUser、Get-LocalGroupMember |
典型使用场景
- 安全巡检:找出启用状态但长期未登录的本地账户
- 清点内置 Administrator 与 Guest 的启用情况,核对基线处置是否到位
- 导出全机账户清单 CSV,作为资产与合规台账
- 排查口令策略:哪些账户被设置成密码永不过期
- 账户变更前后做前后对比,留存操作痕迹
常用示例
常用示例
Get-LocalUser | Format-Table Name, Enabled, LastLogon, PasswordLastSet, PasswordExpires
Get-LocalUser | Where-Object { -not $_.Enabled } # 已停用账户
Get-LocalUser | Where-Object { $_.Enabled -and $null -eq $_.PasswordExpires } # 启用且密码永不过期
Get-LocalUser -Name ops01 | Select-Object *
Get-LocalUser | Select-Object Name, Enabled, LastLogon | Export-Csv .\users.csv -NoTypeInformation -Encoding UTF8字段读法
| 字段 | 含义 | 判读 |
|---|---|---|
| Name | 账户名 | 与 net user 显示一致 |
| Enabled | 是否启用 | False 表示已停用 |
| LastLogon | 上次登录时间 | 部分场景不更新,需与事件 4624 交叉验证 |
| PasswordLastSet | 上次设置密码时间 | 远早于策略周期说明口令长期未轮换 |
| PasswordExpires | 密码到期时间 | null 表示永不过期,属审计高风险项 |
PasswordExpires 为空有两种含义:账户设为“密码永不过期”,或该账户不参与密码策略。审计口径可统一按“未强制轮换”处理。
LastLogon 并不会被所有登录类型刷新,登录审计应以安全日志 4624 与 4625 为准;Get-LocalUser 更适合账户面清点而非登录溯源。