爲什麼大家這麼快說這個不能做?這對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版本中仍能繼續工作,但它確實可用於您打算定位的目標,爲什麼不使用它?
你是如何得到這臺機器的用戶列表?或者,你是否讓Active Directory域中的所有用戶在迭代之前迭代了他們以前登錄到該機器的機會? – 2011-05-03 20:40:49
現在我沒有列出用戶。讓我們假設我知道機器上的所有用戶。 – 2011-05-04 05:40:59