在计算机上有3个用户:Adminstrator,UserA和UserB
当我以管理员身份登录时,如何分别检索UserA的Desktop文件夹和UserB的路径?
我正在寻找将在Windows 7和Windows Server 2008上运行的VBScript。
我尝试了 SpecialFolders(“桌面”),但这会返回管理员桌面,而不是UserA。 结果我想得到“C:\ Users \ UserA \ Desktop”和“C:\ Users \ UserB \ Desktop”
还在寻找一种方法来检索UserA和UserB“Start Munu \ Programs”forlder
答案 0 :(得分:2)
为什么每个人都这么快就说不能做到这一点?使用WMI非常容易。
我已将剧本分成几部分,以便您了解我是如何执行每一步的。
arrAccounts = Array("UserA", "UserB")
For Each strUser in arrAccounts
WScript.Echo GetUserDesktop(GetSID(strUser))
Next
Function GetUserDesktop(strSID)
Const HKEY_USERS = &H80000003
strComputer = "."
Set objRegistry = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" _
& strComputer & "\root\default:StdRegProv")
strKeyPath = strSID & "\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders"
strValueName = "Desktop"
objRegistry.GetStringValue HKEY_USERS, strKeyPath, strValueName, strValue
GetUserDesktop = strValue
End Function
Function GetSID(strUser)
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
' Get the computer name (using WMI)
For Each objComputer In objWMIService.ExecQuery("Select * from Win32_ComputerSystem")
strComputerName = objComputer.Name
Exit For
Next
' You could just as easily do this...
' strComputerName = CreateObject("WScript.Network").ComputerName
Set objAccount = objWMIService.Get _
("Win32_UserAccount.Name='" & strUser & "',Domain='" & strComputerName & "'")
GetSID = objAccount.SID
End Function
请注意,Microsoft建议不要使用注册表来确定用户shell文件夹的位置。无法保证此方法将继续在Windows的未来版本中运行,但它确实适用于您打算定位的那些,为什么不使用它呢?
答案 1 :(得分:0)
(改编自my answer类似问题Getting special Folder path for a given user in Jscript。)
这不能在纯VBcript和Windows脚本宿主中完成,不能没有外部实用程序。
另一方面,如果您使用支持Windows API调用的语言(例如C#或C ++),您将能够执行以下任务:a)使用SHGetKnownFolderPath函数(或{{ 3)}在Vista之前的Windows版本上),或b)通过读取该用户的注册表配置单元的路径。有关详细信息,请参阅以下问题: