• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 2519
  • Last Modified:

Find User Home Directory LDAP

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
tigermatt
Asked:
tigermatt
  • 2
  • 2
1 Solution
 
JohnGerhardtCommented:
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
 
tigermattAuthor Commented:
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
 
tigermattAuthor Commented:
Thanks! You may be interested in my comment I just posted as to how I eliminated a few lines of code... :)
0
 
JohnGerhardtCommented:
That is definetly a bit neater..  
Thanks!
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Featured Post

Improve Your Query Performance Tuning

In this FREE six-day email course, you'll learn from Janis Griffin, Database Performance Evangelist. She'll teach 12 steps that you can use to optimize your queries as much as possible and see measurable results in your work. Get started today!

  • 2
  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now