We help IT Professionals succeed at work.
Get Started

Home dir from Active Directory compared to server share - VBScript

SnAkEhIpS asked
Last Modified: 2012-05-11
In short, the plan is to compare the user directories on a server to the mapped home directories of all users in a given OU. If it turns out that there are user directories on the server that no user in the OU is mapped to then those are considered orphaned directories. Orphaned directories will be moved to an archive directory for a period of time prior to deletion. The entire process is going to be repeated for 12 servers.

One part of the process involves finding all users in an OU who have their home directory mapped to a particular server . Second, for every user who is mapped to that server the base name of their home directory must be extracted. For example:
If their full home directory path = \\ServerName\Users\JohnDoe\Home
then the base directory name = JohnDoe
I'm assuming that the results would be placed into an array or dictionary.

Another part of the process involves extracting the base name of the user directories on the server in reference and comparing them with the other array. Attached is a script that might do that with some modification. Any guidance?

strComputer = "."
Dim arrFolders()
i = 0
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")

strFolderName = "C:\Temp"

Set colSubfolders = objWMIService.ExecQuery _
    ("Associators of {Win32_Directory.Name='" & strFolderName & "'} " _
        & "Where AssocClass = Win32_Subdirectory " _
            & "ResultRole = PartComponent")

For Each objFolder in colSubfolders
	strName = objFolder.name
	arrNames = Split(strName, "\")
	intIndex = Ubound(arrNames)
	Redim Preserve arrFolders (i)
 	arrFolders (i) = arrNames(intIndex)
	'Wscript.Echo arrNames(intIndex)
	i = i + 1

Const FOR_WRITING = 2 
Dim objFso 
Dim objOutputFile 
Dim strOutputFile 
Dim arrFirst 
Dim arrSecond 
Dim strElementFirst 
Dim strElementSecond 
Dim blnExistsInSecond 
strOutputFile = "C:\temp\Differences.txt" 
Set objFso = CreateObject("Scripting.FileSystemObject") 
If objFso.FileExists(strOutputFile) Then 
Set objOutputFile = objFso.OpenTextFile(strOutputFile,FOR_WRITING) 
Set objOutputFile = objFso.CreateTextFile(strOutputFile) 
End If 
'arrFirst consists of the user directories in the server's user share
arrFirst = arrFolders
'arrSecond consists of user hmdir mappings found in AD for that specific server (currently psuedo entries) 
arrSecond = Array("F","G","H","a","B","Z","foLdEr12") 
For Each strElementFirst In arrFirst 
blnExistsInSecond = False 
For Each strElementSecond In arrSecond 
'If strElementFirst = strElementSecond Then 
If lcase(strElementFirst) = lcase(strElementSecond) Then 
blnExistsInSecond = True 
Exit For 
End If 
If Not blnExistsInSecond Then 
objOutputFile.WriteLine strElementFirst & " does not exist in the second array" 
End If 

Open in new window

Watch Question
Most Valuable Expert 2012
Top Expert 2014
This problem has been solved!
Unlock 1 Answer and 11 Comments.
See Answer
Why Experts Exchange?

Experts Exchange always has the answer, or at the least points me in the correct direction! It is like having another employee that is extremely experienced.

Jim Murphy
Programmer at Smart IT Solutions

When asked, what has been your best career decision?

Deciding to stick with EE.

Mohamed Asif
Technical Department Head

Being involved with EE helped me to grow personally and professionally.

Carl Webster
CTP, Sr Infrastructure Consultant
Ask ANY Question

Connect with Certified Experts to gain insight and support on specific technology challenges including:

  • Troubleshooting
  • Research
  • Professional Opinions
Did You Know?

We've partnered with two important charities to provide clean water and computer science education to those who need it most. READ MORE