Solved

How do I delete user account from AD using vbscript and a spreadsheet with the accounts to remove

Posted on 2008-06-19
5
1,844 Views
Last Modified: 2008-10-28
I need a vbscript that will look at a spreadsheet and then delete those accounts from Active Directory based on the user logon.
0
Comment
Question by:WNottsC
  • 3
5 Comments
 
LVL 24

Accepted Solution

by:
purplepomegranite earned 500 total points
ID: 21820796
The attached should do what you want.

I have tested the Excel code part (just change the variables at the beginning of the script for your needs), but I have been unable to check the AD part due to not being on a domain right now (or having access to a lab domain), so this part needs testing.

It should work - it was taken from another script to delete user accounts that worked.  Let me know!
strSourceWorkbook="E:\ee\AD\Delete AD Accounts from Excel List\test.xls" ' The workbook containing the account list

strSourceSheet="Sheet1" ' Set this to the name of the sheet containing the username list

rngUsername="B2" ' Set this to the first cell containing username in Excel
 

On Error Resume Next

Const ADS_PROPERTY_DELETE = 4

Const E_ADS_PROPERTY_NOT_FOUND  = &h8000500D
 

' Initialise Excel

set oExcel=CreateObject("excel.application")

if Err.Number<>0 then

	Err.Clear

	WScript.Echo "Failed to open Excel"

	WScript.Quit

end if

oExcel.Visible=false

oExcel.DisplayAlerts=false ' Don't show any dialog box prompts
 

' Initialise connection

set adoCon = CreateObject("ADODB.Connection")

set adoCmd =   CreateObject("ADODB.Command")

adoCon.Provider = "ADsDSOObject"

adoCon.Open "Active Directory Provider"

set adoCmd.ActiveConnection = adoCon

adoCmd.Properties("Page Size") = 1000

adoCmd.Properties("Timeout") = 30

adoCmd.Properties("Cache Results") = False
 

' Obtain usernames from Excel file

set srcWorkbook=oExcel.Workbooks.Open(strSourceWorkBook)

if Err.Number=0 then

	i=0

	while not srcWorkbook.Sheets(strSourceSheet).Range(rngUsername).Offset(i).Value=""

		strUsername=srcWorkbook.Sheets(strSourceSheet).Range(rngUsername).Offset(i).Value

		wsclript.echo "Deleting user " & strUserName

		DeleteUser strUsername

		i=i+1

	wend

	srcWorkbook.Close

else

	wscript.echo "Couldn't open workbook: " & Err.Description

	Err.Clear

end if

oExcel.Quit
 

' Close connection

adoRec.Close

set adoRec = Nothing

adoCon.Close

set adoCon = Nothing
 
 

sub DeleteUser(strUsername)

	set objRootDSE = GetObject("LDAP://RootDSE")

	strDNSDomain = objRootDSE.Get("defaultNamingContext")

	strFilter = "(&(SAMAccountType=805306368)(SAMAccountName=" & strUsername & "))"

	strFields = "distinguishedName, ADsPath"
 

	strQuery = "<LDAP://" & strDNSDomain & ">;" & strFilter & ";" & strFields & ";subtree"

	adoCmd.CommandText = strQuery

	set adoRec = adoCmd.Execute

	while not adoRec.EOF

	      set objUser = GetObject(adoRec.Fields("ADsPath").Value)

			wscript.echo "Deleting " & objRecordSet.Fields("distinguishedName").Value

			Set objUser = GetObject("LDAP://" & objRecordSet.Fields("distinguishedName").Value)

			objUser.Delete "user", "distinguishedName=" & objRecordSet.Fields("distinguishedName").Value

	      adoRec.MoveNext

	wend

end sub

Open in new window

0
 
LVL 24

Expert Comment

by:purplepomegranite
ID: 22007922
Thanks for the points, but why the B-grade?

http://www.experts-exchange.com/help.jsp#hi97
0
 

Author Comment

by:WNottsC
ID: 22008005
The solution was very good but I did have to provide a few changes in order to get this fully functioning.
0
 
LVL 24

Expert Comment

by:purplepomegranite
ID: 22008017
Thanks for clarifying.  Would it be possible to post the changes so that this question has a complete solution for anyone else looking for a similar function?  And also for my reference, of course! :-)
0
 
LVL 6

Expert Comment

by:Ahmed Abdel Salam
ID: 22802688
I am looking for same request .. this script is not working

any update on this ??
0

Featured Post

3 Use Cases for Connected Systems

Our Dev teams are like yours. They’re continually cranking out code for new features/bugs fixes, testing, deploying, testing some more, responding to production monitoring events and more. It’s complex. So, we thought you’d like to see what’s working for us.

Question has a verified solution.

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

Suggested Solutions

Go is an acronym of golang, is a programming language developed Google in 2007. Go is a new language that is mostly in the C family, with significant input from Pascal/Modula/Oberon family. Hence Go arisen as low-level language with fast compilation…
Deploying a Microsoft Access application in a Citrix environment is not difficult but takes a few steps. However, Citrix system people are often of little help, as they typically know next to nothing about Access. The script provided here will take …
Learn the basics of lists in Python. Lists, as their name suggests, are a means for ordering and storing values. : Lists are declared using brackets; for example: t = [1, 2, 3]: Lists may contain a mix of data types; for example: t = ['string', 1, T…
The viewer will learn how to create and use a small PHP class to apply a watermark to an image. This video shows the viewer the setup for the PHP watermark as well as important coding language. Continue to Part 2 to learn the core code used in creat…

867 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

22 Experts available now in Live!

Get 1:1 Help Now