如何获取或检索不同的用户´;桌面文件夹比当前用户´;使用VBScript的桌面文件夹?

如何获取或检索不同的用户´;桌面文件夹比当前用户´;使用VBScript的桌面文件夹?,vbscript,Vbscript,在Windows计算机上有三个用户:Administrator、UserA和UserB 当我以管理员身份登录时,如何分别检索到UserA的桌面文件夹和UserB的路径 我正在寻找将在Windows7和WindowsServer2008上运行的VBScript 我尝试了SpecialFolders(“桌面”),但这将返回管理员的桌面文件夹路径,而不是UserA的桌面文件夹路径 因此,我希望获得C:\Users\UserA\Desktop和C:\Users\UserB\Desktop的路径 还正在寻

在Windows计算机上有三个用户:
Administrator
UserA
UserB

当我以管理员身份登录时,如何分别检索到
UserA
的桌面文件夹和
UserB
的路径

我正在寻找将在Windows7和WindowsServer2008上运行的VBScript

我尝试了
SpecialFolders(“桌面”)
,但这将返回
管理员的桌面文件夹路径,而不是
UserA的桌面文件夹路径

因此,我希望获得
C:\Users\UserA\Desktop
C:\Users\UserB\Desktop
的路径

还正在寻找一种方法来检索
UserA
UserB
的文件夹
Start Menu\Programs
(根据类似问题改编)

这不能在纯VBScript和Windows脚本主机中完成,没有外部实用程序也不行

另一方面,如果要使用支持Windows API调用的语言(如C#或C++),则可以执行任务a)使用函数(或Vista之前的Windows版本),或b)从该用户的注册表配置单元读取路径。有关详细信息,请参见以下问题:


    • 为什么每个人都这么快就说这是不可能的?使用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的未来版本中继续有效,但它在您打算针对的版本中确实有效,所以为什么不使用它呢