Learn how to a build a cloud-first strategyRegister Now

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 1885
  • Last Modified:

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

I need a vbscript that will look at a spreadsheet and then delete those accounts from Active Directory based on the user logon.
0
WNottsC
Asked:
WNottsC
  • 3
1 Solution
 
purplepomegraniteCommented:
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
 
purplepomegraniteCommented:
Thanks for the points, but why the B-grade?

http://www.experts-exchange.com/help.jsp#hi97
0
 
WNottsCAuthor Commented:
The solution was very good but I did have to provide a few changes in order to get this fully functioning.
0
 
purplepomegraniteCommented:
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
 
Ahmed Abdel SalamCommented:
I am looking for same request .. this script is not working

any update on this ??
0

Featured Post

How to Use the Help Bell

Need to boost the visibility of your question for solutions? Use the Experts Exchange Help Bell to confirm priority levels and contact subject-matter experts for question attention.  Check out this how-to article for more information.

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