我需要在 PowerShell(最好是 PS2.0+)中列出用户在本地存在但用户本身可能不是本地用户的本地系统上的所有用户帐户。也就是说,设备可能连接到域,其中类似的命令get-WMIObject Win32_UserAccount
将列出域中的所有用户,并且(很可能)超时或遇到权限错误,因为该命令是从上下文的上下文中运行的。本地用户(即使它作为 LocalSystem 帐户执行)。
以下是我所知道的列举用户的各种方法以及它们不合适的原因。
get-WMIObject Win32_UserAccount -Filter {LocalAccount="True"}
这不会显示实际登录设备的域用户;它仅显示已在相关设备上本地设置的用户,而将潜在用户帐户留在桌面上。net user
如上。get-WMIObject Win32_UserAccount
(没有其他参数)
在连接到适当大域的设备上,此查询挂起并最终以“任务取消”错误退出,因为它试图枚举数千个用户。我只需要在本地设备上存在的用户。- 枚举
HKEY_USERS
此配置单元仅将查询时登录的用户的配置文件作为键枚举。 - 枚举
C:\Users
这行得通,但我不愿意使用它;感觉太不精确了。Default
此外,它还添加了Public
我不感兴趣的无用帐户。
我将尝试先发制人,例如对类似问题的回应(“那么您需要重新设计您的应用程序”),并指出我并未尝试从这些用户配置文件中收集数据。我所需要的只是列举它们;accountName 值就足够了。
Windows 中的某个地方是否有分类帐或名册,除了查看文件夹之外,我可以查询这些数据吗?
注册表项
HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList
包含具有 Windows 已知的用户配置文件目录的所有帐户的子项。本地“用户”组中的每个人都对该密钥具有读取权限。子键以帐户 SID 命名,您可以使用现有 API将其映射到用户名:
使用已知 SID表过滤掉不需要的“内部帐户”SID 或 SID 前缀。(通常所有“真实”账户的 SID 都以 . 开头
S-1-5-21-
。)