我认为HKEY_USERS正下方的关键名称应该是在某个时间登录此计算机的用户名。但在我的机器上出现的是:
S-1-5-18
S-1-5-19
S-1-5-20
S-1-5-21-NNNNNNNNN-NNNNNNNNN-NNNNNNNNNN-NNNNN
S-1-5-21-NNNNNNNNN-NNNNNNNNN-NNNNNNNNNN-NNNNN_Classes
我希望能够确定哪个子树对应哪个用户。我怎么能这样做?
编辑:我需要的是从SID获取用户名。我想检查已经登录的每个用户的配置,我需要知道他们的名字。例如,在上面的注册表中,我需要能够,基于字符串“S-1-5-21-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN somebodyelse。
答案 0 :(得分:9)
可以从WMI查询此信息。以下命令将输出一个表,其中包含每个用户的行以及每个用户的SID。
wmic useraccount get name,sid
您也可以将此信息导出为CSV:
wmic useraccount get name,sid /format:csv > output.csv
我在Vista和7上使用过它(根据2008 R2上的评论)。有关详细信息,请参阅WMIC - Take Command-line Control over WMI。
答案 1 :(得分:2)
我相信这些数字是用户的安全ID(SID)。您可以使用SysInternals获取用户的SID:
http://technet.microsoft.com/en-us/sysinternals/bb897417.aspx
答案 2 :(得分:2)
对于PowerShell,这很快:
gwmi win32_userprofile | ft localpath, sid
Ashley McGlone
微软PFE
http://aka.ms/GoateePFE
答案 3 :(得分:1)
HKLM \ System \ CurrentControlSet \ Control \ hivelist将显示从哪里安装配置单元。虽然不是直接映射,但通常挂载点在路径中具有用户名。
我确信有比这更好的答案......
答案 4 :(得分:0)
手动执行此操作(无需额外工具)时,最简单的方法是打开该密钥的权限。拥有完全权限的唯一用户是密钥的所有者。
从程序中,您需要一种方法将SID转换为帐户名称。在C#(或PowerShell)中,请查看SecurityIdentifier和NtAccount类。
答案 5 :(得分:0)
在C#中似乎有一个答案,将用户名转换为SID http://community.bartdesmet.net/blogs/bart/archive/2006/09/08/4394.aspx,但它仅适用于本地PC。
对于AD,我将其转换为:
using System;
using System.DirectoryServices;
using System.Security.Principal;
class Program {
static void Main(string[] args) {
string path = "LDAP://" + args[0];
DirectoryEntry root = new DirectoryEntry(path, args[1], null, AuthenticationTypes.Secure);
string sid = new SecurityIdentifier((byte[])root.Properties["objectSID"][0], 0).Value;
Console.WriteLine(sid);
}
}
用法是:programname.exe DOMAIN用户名
e.g。 programname.exe somecompany.com preet_sangha
答案 6 :(得分:0)
请使用powershell:
$mydocuments = [Environment]::GetFolderPath("mydocuments")
gwmi win32_userprofile | ft localpath, sid, status -AutoSize | Out-File $mydocuments\userprofiles.txt