2011-05-03 32 views
2

在計算機上有3個用戶:管理員聯繫,UserA和用戶B檢索用戶的桌面文件夾中的VBScript

當我'作爲管理員登錄如何分別獲取用戶A的桌面文件夾和用戶B的路徑?

我'尋找的VBScript,這將在Windows 7和Windows Server 2008

運行我試圖SpecialFolders(「桌面」)但這返回管理員的桌面,而不是用戶a。 因此,我希望得到「C:\用戶\用戶A \桌面」和「C:\用戶\用戶B \桌面」

也在尋找一種方式來獲取用戶A和用戶B「開始Munu \程序」 forlder

+0

你是如何得到這臺機器的用戶列表?或者,你是否讓Active Directory域中的所有用戶在迭代之前迭代了他們以前登錄到該機器的機會? – 2011-05-03 20:40:49

+0

現在我沒有列出用戶。讓我們假設我知道機器上的所有用戶。 – 2011-05-04 05:40:59

回答

0

(從my answer上類似的問題Getting special Folder path for a given user in Jscript改編。)

這不能純VBcript和Windows Script Host的工作尚未完成,無需外部工具。另一方面,如果您要使用支持Windows API調用的語言(例如C#或C++),則可以執行以下任務:a)使用SHGetKnownFolderPath函數(或Windows版本上的SHGetFolderPath)到Vista),或者b)通過閱讀該用戶註冊表配置單元的路徑。看到這些問題的詳細信息:

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版本中仍能繼續工作,但它確實可用於您打算定位的目標,爲什麼不使用它?

+0

謝謝你的迴應。我收到「Set objAccount = objWMIService.Get(...)」一行的錯誤。 --------------------------- 錯誤:\t無效的對象路徑 代碼:\t 8004103A 來源:\t SWbemServicesEx – 2011-05-04 14:33:27

+0

我錯過了一個錯字在我的代碼示例中。對於那個很抱歉。它被糾正了。 – Nilpo 2011-05-05 07:21:06

+0

同樣的錯誤。我將您的代碼複製並粘貼到新的.vbs文件中。還有什麼我該做的? – 2011-05-05 09:38:32

相關問題