Solved

LDAP Query of manager and update manager

Posted on 2008-10-24
3
2,145 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
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 2
3 Comments
 
LVL 71

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 71

Expert Comment

by:Chris Dent
ID: 22813288

You're welcome :)

Chris
0

Featured Post

Free learning courses: Active Directory Deep Dive

Get a firm grasp on your IT environment when you learn Active Directory best practices with Veeam! Watch all, or choose any amount, of this three-part webinar series to improve your skills. From the basics to virtualization and backup, we got you covered.

Question has a verified solution.

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

I annotated my article on ransomware somewhat extensively, but I keep adding new references and wanted to put a link to the reference library.  Despite all the reference tools I have on hand, it was not easy to find a way to do this easily. I finall…
Recently, Microsoft released a best-practice guide for securing Active Directory. It's a whopping 300+ pages long. Those of us tasked with securing our company’s databases and systems would, ideally, have time to devote to learning the ins and outs…
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…

733 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