Solved

Find User Home Directory LDAP

Posted on 2008-10-08
4
2,465 Views
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")

objUser.GetInfo

 

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

0
Comment
Question by:tigermatt
  • 2
  • 2
4 Comments
 
LVL 17

Accepted Solution

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

	Const ADS_SCOPE_SUBTREE = 2

	Const ADS_UF_ACCOUNTDISABLE = 2 
 

	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 

'ENTER DOMAIN DETAILS HERE

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

	

	Set objRecordSet = objCommand.Execute

	

	

		objRecordSet.MoveFirst

		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 = objUser.sn 

				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

				objUser.SetInfo

				

				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

				objUser.SetInfo

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

			end If

			objRecordSet.MoveNext

		Loop

	

	

End Function

Open in new window

0
 
LVL 58

Author Comment

by:tigermatt
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 :)
Const ADS_SCOPE_SUBTREE = 2
 

'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

rsUser.Close

objConnection.Close

Set rsUser = Nothing

Set objCommand = Nothing

Set objConnection = Nothing

Open in new window

0
 
LVL 58

Author Closing Comment

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

Expert Comment

by:JohnGerhardt
ID: 22671752
That is definetly a bit neater..  
Thanks!
0

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