Получить папку пользователя на рабочем столе VBScript - PullRequest
2 голосов
/ 03 мая 2011

На компьютере 3 пользователя: Adminstrator, UserA и UserB

Когда я вошел в систему как администратор, как получить путь к папке рабочего стола пользователя A и пользователю B соответственно?

Я ищу VBScript, который будет работать в Windows 7 и Windows Server 2008.

Я пытался SpecialFolders ("Рабочий стол") , но это возвращает рабочий стол администратора, а не пользователя A. В результате я хочу получить «C: \ Users \ UserA \ Desktop» и «C: \ Users \ UserB \ Desktop»

Также ищите способ получить UserA и UserB «Запустить Munu \ Programs» для

Ответы [ 2 ]

2 голосов
/ 04 мая 2011

Почему все так быстро говорят, что это невозможно сделать? Это очень легко сделать с помощью 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 не советует использовать реестр для определения местоположения папок оболочки пользователя. Нет никаких гарантий, что этот метод будет продолжать работать в будущих версиях Windows, но он работает в тех, на которые вы собираетесь ориентироваться, так почему бы не использовать его?

0 голосов
/ 04 мая 2011

(адаптировано из мой ответ на аналогичный вопрос Получение специального пути к папке для данного пользователя в Jscript .)

Это не может быть сделано в чистом VBcript и Windows Script Host, не без внешних утилит.

С другой стороны, если бы вы использовали язык, поддерживающий вызовы API Windows (например, C # или C ++), вы могли бы выполнить вашу задачу либо a), используя функцию SHGetKnownFolderPath (или SHGetFolderPath в версиях Windows до Vista) или б) путем чтения пути из куста реестра этого пользователя. Подробности смотрите в этих вопросах:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...