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

What is SQL Server and how does it work?

The purpose of this paper is to provide you background on SQL Server. It’s your self-study guide for learning fundamentals. It includes both the history of SQL and its technical basics. Concepts and definitions will form the solid foundation of your future DBA expertise.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
Session that filled up my transaction logs 1 40
Problem to With line 4 42
change the windows script file to BAT 10 30
Check folder every for files and print them 5 23
This article describes some very basic things about SQL Server filegroups.
Entity Framework is a powerful tool to help you interact with the DataBase but still doesn't help much when we have a Stored Procedure that returns more than one resultset. The solution takes some of out-of-the-box thinking; read on!
The viewer will learn how to user default arguments when defining functions. This method of defining functions will be contrasted with the non-default-argument of defining functions.
The viewer will be introduced to the technique of using vectors in C++. The video will cover how to define a vector, store values in the vector and retrieve data from the values stored in the vector.

920 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

17 Experts available now in Live!

Get 1:1 Help Now