Solved

LDAP Query of manager and update manager

Posted on 2008-10-24
3
2,139 Views
Last Modified: 2013-12-24
I'm on a quest to update an employee's supervisor in AD.

I've got the part where we're querying the user's manager all set. But as soon as I query the adspath of the manager to put that into the user's manager field in their AD record, I get an error 80005008 at Line 49 which is:
            if usrmgr <> "" then usr.put "manager", usrmgr
Any ideas why this would be happening?

Thanks
Call Run_SetManager
 
Function Run_SetManager
 
set conn = CreateObject("ADODB.Connection")
set rsExch = CreateObject("ADODB.Recordset")
set rsADUsr = CreateObject("ADODB.Recordset")
set rsADMGR = CreateObject("ADODB.Recordset")
Set oCmd = CreateObject("ADODB.Command")
Set oCmd1 = CreateObject("ADODB.Command")
 
conn.Open "Data Source=Active Directory Provider;Provider=ADsDSOObject"
 
uname = inputbox("Enter the FULL NAME of the user to modify:", "Enter Username")
 
If uname = "exit" Or uname = "" Or uname = "Exit" Then 
Exit Function 
End If 
 
if uname <> "" then
	strADOQuery = "SELECT adspath, manager, title from 'LDAP://pathtodomain'' WHERE objectCategory='person' AND objectClass='user' AND name = '" & uname & "'"
	oCmd.ActiveConnection = conn
	oCmd.Properties("SearchScope") = 2
	oCmd.CommandText = strADOQuery
		
	set rsADUsr = oCmd.Execute
	if rsADUsr.RecordCount = 0 then msgbox "Username not found."
	if rsADUsr.RecordCount > 1 then msgbox "Multiple names found. This script can't help you."
	if rsADUsr.RecordCount = 1 then
		set usr = GetObject(rsADUsr.Fields("ADsPath"))
		if isnull(rsADUsr.Fields("manager")) = true then current = ""		
		if isnull(rsADUsr.Fields("manager")) = false then current = rsADUsr.Fields("manager")
		URL = inputbox("DO NOT PRESS CANCEL. PRESSING CANCEL WILL ERASE THIS ATTRIBUTE." & vbcrlf & vbcrlf & "Change Manager for " & uname & " to:", "Change Manager")
				strADOQueryMGR = "SELECT adspath from 'LDAP://pathtodc' WHERE objectCategory='person' AND objectClass='user' AND name = '" & URL & "'"
				oCmd1.ActiveConnection = conn
				oCmd1.Properties("SearchScope") = 2
				oCmd1.CommandText = strADOQueryMGR
					
				set rsADMGR = oCmd1.Execute
				if rsADMGR.RecordCount = 0 then msgbox "Manager not found."
				if rsADMGR.RecordCount > 1 then msgbox "Multiple managers found. This script can't help you."
				if rsADMGR.RecordCount = 1 Then 
					set usrmgr = rsADMGR.Fields("adspath")
				end if
 
		if usrmgr <> "" then usr.put "manager", usrmgr
		if usrmgr = "" then usr.Putex 1, "manager", ""
		usr.SetInfo
		msgbox "Manager Update Successful"
		set usr = nothing
	end if
end If
 
 
 
conn.close
set ocmd = nothing
set ocmd1 = nothing
set rsExch = nothing
set rsADUsr = Nothing
set rsADMGR = nothing
set conn = nothing
 
End Function

Open in new window

0
Comment
Question by:ksb-sys
  • 2
3 Comments
 
LVL 70

Accepted Solution

by:
Chris Dent earned 125 total points
ID: 22802579

Hey :)

Add distinguishedName into here:

>         strADOQuery = "SELECT adspath, manager, title from 'LDAP://pathtodomain''
> WHERE objectCategory='person' AND objectClass='user' AND name = '" & uname & "'"

e.g.

strADOQuery = "SELECT adspath, manager, title, distinguishedName from 'LDAP://pathtodomain' " &_
  "WHERE objectCategory='person' AND objectClass='user' AND name = '" & uname & "'"

Then change this:

> set usrmgr = rsADMGR.Fields("adspath")

To:

usrmgr = rsADMGR.Fields("distinguishedName")

ADSPath includes LDAP:// which isn't valid for the manager field. Set is unnecessary as it's just a string value, not an object.

HTH

Chris
0
 

Author Comment

by:ksb-sys
ID: 22813269
Perfect! Thank yoU!!!
0
 
LVL 70

Expert Comment

by:Chris Dent
ID: 22813288

You're welcome :)

Chris
0

Featured Post

NFR key for Veeam Backup for Microsoft Office 365

Veeam is happy to provide a free NFR license (for 1 year, up to 10 users). This license allows for the non‑production use of Veeam Backup for Microsoft Office 365 in your home lab without any feature limitations.

Question has a verified solution.

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

Suggested Solutions

Whether you've completed a degree in computer sciences or you're a self-taught programmer, writing your first lines of code in the real world is always a challenge. Here are some of the most common pitfalls for new programmers.
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…
Video by: Steve
Using examples as well as descriptions, step through each of the common simple join types, explaining differences in syntax, differences in expected outputs and showing how the queries run along with the actual outputs based upon a simple set of dem…
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…

861 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