检索用户的桌面文件夹VBScript

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了检索用户的桌面文件夹VBScript相关的知识,希望对你有一定的参考价值。

在计算机上有3个用户:管理员,用户和用户

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

我正在寻找将在Windows 7和Windows Server 2008上运行的VBScript。

我尝试过SpecialFolders(“桌面”),但这会返回管理员的桌面,而不是UserA。结果我想得到“C: Users UserA Desktop”和“C: Users UserB Desktop”

还寻找一种方法来检索用户和用户“开始菜单程序”文件夹

答案

(改编自my answer关于类似问题Getting special Folder path for a given user in Jscript。)

这不能在纯VBcript和Windows脚本宿主中完成,不能没有外部实用程序。

另一方面,如果您使用支持Windows API调用的语言(例如C#或C ++),您将能够执行以下任务:a)使用SHGetKnownFolderPath函数(或Vista之前的Windows版本上的SHGetFolderPath),或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 & "
ootdefault:StdRegProv")
    strKeyPath = strSID & "SoftwareMicrosoftWindowsCurrentVersionExplorerShell Folders"
    strValueName = "Desktop"
    objRegistry.GetStringValue HKEY_USERS, strKeyPath, strValueName, strValue
    GetUserDesktop = strValue
End Function

Function GetSID(strUser)
    strComputer = "."
    Set objWMIService = GetObject("winmgmts:\" & strComputer & "
ootcimv2")

    ' 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的未来版本中运行,但它确实适用于您要定位的那些,所以为什么不使用它?

以上是关于检索用户的桌面文件夹VBScript的主要内容,如果未能解决你的问题,请参考以下文章

使用 VBScript 从 100 万多个 csv 文件中检索值

vbscript 在用户桌面上保存工作簿!

vbscript 各种自定义代码片段 - 有关详细信息,请参阅注释

用于从 cloudkit 检索单列的代码模式/片段

检索数据未出现在 ListView 的片段中

vbscript 一个简单的片段,用于复制大小和位置。