如何检索计算机上存储的所有用户个人资料的用户名和域?
以下是用户个人资料管理器的屏幕截图,用于说明我的意思:
答案 0 :(得分:3)
配置文件由SID映射。映射存储在此注册表项中:
[HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList]
您可以将WMI用于enumerate SID,将resolve用于用户和域名:
Const HKLM = &h80000002
Const profiles = "SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList"
Set wmi = GetObject("winmgmts://./root/cimv2")
Set reg = GetObject("winmgmts://./root/default:StdRegProv")
reg.EnumKey HKLM, profiles, subkeys
For Each sid In subkeys
Set acct = wmi.Get("Win32_SID.SID='" & sid & "'")
WScript.Echo acct.ReferencedDomainName & "\" & acct.AccountName
Next
如果您只查找现有个人资料文件夹的用户/域,请检查子项内的ProfileImagePath
值是否指向现有文件夹:
Const HKLM = &h80000002
Const profiles = "SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList"
Set sh = CreateObject("WScript.Shell")
Set fso = CreateObject("Scripting.FileSystemObject")
Set wmi = GetObject("winmgmts://./root/cimv2")
Set reg = GetObject("winmgmts://./root/default:StdRegProv")
reg.EnumKey HKLM, profiles, subkeys
For Each sid In subkeys
reg.GetStringValue HKLM, profiles & "\" & sid, "ProfileImagePath", path
path = sh.ExpandEnvironmentStrings(path)
If fso.FolderExists(path) Then
Set acct = wmi.Get("Win32_SID.SID='" & sid & "'")
WScript.Echo acct.ReferencedDomainName & "\" & acct.AccountName
End If
Next