Find User Home Directory LDAP

Posted on 2008-10-08
Last Modified: 2013-12-24
I am trying (rather unsuccessfully) to retrieve a user's home directory path from Active Directory. Users login to my system using their network username; I need to take this username value and retrieve the user's home directory path for it. The code below works, but requires that I know the user's full and last name, and OU path - something which will obviously change.

I can't seem to find any information on how to query Active Directory based on user username, only full name. Could somebody help?
On Error Resume Next

Set objUser = GetObject _

  ("LDAP://CN=John Doe,OU=Test Users,OU=User Accounts,OU=The Company,DC=domain,DC=internal")



strProfilePath = objUser.Get("profilePath")

strScriptPath = objUser.Get("scriptPath")

strHomeDirectory = objUser.Get("homeDirectory")

strHomeDrive = objUser.Get("homeDrive")


WScript.echo "profilePath: " & strProfilePath

WScript.echo "scriptPath: " & strScriptPath

WScript.echo "homeDirectory: " & strHomeDirectory

WScript.echo "homeDrive: " & strHomeDrive

Open in new window

Question by:tigermatt
  • 2
  • 2
LVL 17

Accepted Solution

JohnGerhardt earned 500 total points
ID: 22670967
This is what we use...
Function SearchUser(strUser)



	Set objConnection = CreateObject("ADODB.Connection")

	Set objCommand = CreateObject("ADODB.Command")

	objConnection.Provider = "ADsDSOObject"

	objConnection.Open "Active Directory Provider"

	Set objCommand.ActiveConnection = objConnection

	objCommand.Properties("Page Size") = 1000

	objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE 


	objCommand.CommandText = "SELECT ADsPath FROM 'LDAP://dc=DOMAIN,dc=internal' WHERE objectCategory='user' " & "AND name=' " & strUser & "'"


	Set objRecordSet = objCommand.Execute




		Do Until objRecordSet.EOF

			WScript.Echo "User found in AD!"

			Success = True


			UserVar = objRecordSet.Fields("ADsPath").Value

			Dim objUSer

			Set objUSer = GetObject(Uservar)



			SamAccountName = objUser.samAccountName 

				Cn = objUser.CN

				DisplayName = objUser.DisplayName

				FirstName = objUser.GivenName 

				LastName = 

				initials = objUser.initials 

				Descrip = objUser.description 


				Profile = objUser.profilePath 

				LoginScript = objUser.scriptpath 

				HomeDirectory = objUser.HomeDirectory 

				HomeDrive = objUser.homeDrive 

				AdsPath = objUser.Adspath 

				'LastLogin = objUser.LastLogin


				WScript.Echo vbTab & "SAM Account Name:" & vbTab & SamAccountName

				WScript.Echo vbTab & "CN:" & vbTab &  vbTab & vbTab & vbTab & vbTab & Cn

				WScript.Echo vbTab & "Display Name:" & vbTab &  vbTab & DisplayName

				WScript.Echo vbTab & "First Name:" & vbTab &  vbTab & vbTab & FirstName

				WScript.Echo vbTab & "Last Name:" & vbTab &  vbTab & vbTab & LastName

				WScript.Echo vbTab & "Initials:" & vbTab &  vbTab & vbTab & initials

				WScript.Echo vbTab & "Description:" & vbTab &  vbTab & Descrip

				WScript.Echo vbTab & "Profile:" & vbTab & vbTab & vbTab & Profile

				WScript.Echo vbTab & "LoginScript:" & vbTab &  vbTab & vbTab & LoginScript

				WScript.Echo vbTab & "HomeDirectory:" & vbTab & vbTab & HomeDirectory

				WScript.Echo vbTab & "HomeDrive:" & vbTab & vbTab & vbTab & HomeDrive

				WScript.Echo vbTab & "AdsPath:" & vbTab & vbTab & vbTab & AdsPath

				WScript.Echo vbTab & "LastLogin:" & vbTab & vbTab & vbTab & LastLogin 



			If objUser.AccountDisabled = False Then

				WScript.Echo "User Account found Enabled"

				'objUser.Put "UserFlags", Flags Or ADS_UF_ACCOUNTDISABLE

				objUser.AccountDisabled = True



				WScript.Echo "User Account Enabled?" & objUser.AccountDisabled

			End If

			If objUser.AccountDisabled = True Then

				WScript.Echo "User Account found Disabled"

				'objUser.Put "UserFlags", Flags Or ADS_UF_ACCOUNTDISABLE

				objUser.AccountDisabled = False


				WScript.Echo "User Account Enabled?" & objUser.AccountDisabled

			end If





End Function

Open in new window

LVL 58

Author Comment

ID: 22671314
Thanks for that. I did manage to condense it down a bit - rather than do an SQL-type query to get the full LDAP path to the user, then go and look that path up, I managed to use your code and pull the homeDirectory variable directly from Active Directory in the SQL lookup.

Thanks very much for the pointer :)

'Be sure to set the username variable to the name of the username to lookup

'elsewhere in your script (this does not automatically retrieve it!)

Dim objConnection: Set objConnection = CreateObject("ADODB.Connection")

Dim objCommand: Set objCommand = CreateObject("ADODB.Command")

Dim objRootDSE: Set objRootDSE = GetObject("LDAP://rootDSE")

Dim strDomain: strDomain = objRootDSE.Get("defaultNamingContext")

Set objRootDSE = Nothing

With objConnection

	.Provider = "ADsDSOObject"

	.Open "Active Directory Provider"

End With

Set objCommand.ActiveConnection = objConnection

With objCommand

	.Properties("Page Size") = 1000

	.Properties("SearchScope") = ADS_SCOPE_SUBTREE

	.CommandText = "SELECT homeDirectory FROM 'LDAP://" & strDomain & "' WHERE objectCategory = 'user' AND sAMAccountName = '" & username & "'"

End With

Dim rsUser: Set rsUser = objCommand.Execute

Dim strHomeDir: strHomeDir = rsUser.fields("homeDirectory").value

If Left(strHomeDir, 2) = "\\" Then


	Dim strHomeDirR: strHomeDirR = Right(strHomeDir, Len(strHomeDir) - 2)

	Dim homeServer: homeServer = Mid(strHomeDirR,1,Instr(strHomeDirR, "\")-1)

End If

Set strDomain = Nothing

Set strHomeDir = Nothing

Set strHomeDirR = Nothing

Set homeServer = Nothing



Set rsUser = Nothing

Set objCommand = Nothing

Set objConnection = Nothing

Open in new window

LVL 58

Author Closing Comment

ID: 31504333
Thanks! You may be interested in my comment I just posted as to how I eliminated a few lines of code... :)
LVL 17

Expert Comment

ID: 22671752
That is definetly a bit neater..  

Featured Post

Top 6 Sources for Identifying Threat Actor TTPs

Understanding your enemy is essential. These six sources will help you identify the most popular threat actor tactics, techniques, and procedures (TTPs).

Join & Write a Comment

Whether you’re a college noob or a soon-to-be pro, these tips are sure to help you in your journey to becoming a programming ninja and stand out from the crowd.
Many companies are looking to get out of the datacenter business and to services like Microsoft Azure to provide Infrastructure as a Service (IaaS) solutions for legacy client server workloads, rather than continuing to make capital investments in h…
The goal of the tutorial is to teach the user how to use functions in C++. The video will cover how to define functions, how to call functions and how to create functions prototypes. Microsoft Visual C++ 2010 Express will be used as a text editor an…
Polish reports in Access so they look terrific. Take yourself to another level. Equations, Back Color, Alternate Back Color. Write easy VBA Code. Tighten space to use less pages. Launch report from a menu, considering criteria only when it is filled…

744 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

16 Experts available now in Live!

Get 1:1 Help Now