troubleshooting Question

Home dir from Active Directory compared to server share - VBScript

Avatar of SnAkEhIpS
SnAkEhIpSFlag for United States of America asked on
VB Script
11 Comments1 Solution394 ViewsLast Modified:
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
Next

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) 
Else 
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 
Next 
If Not blnExistsInSecond Then 
objOutputFile.WriteLine strElementFirst & " does not exist in the second array" 
End If 
Next

Open in new window

ASKER CERTIFIED SOLUTION
Join our community to see this answer!
Unlock 1 Answer and 11 Comments.
Start Free Trial
Learn from the best

Network and collaborate with thousands of CTOs, CISOs, and IT Pros rooting for you and your success.

Andrew Hancock - VMware vExpert
See if this solution works for you by signing up for a 7 day free trial.
Unlock 1 Answer and 11 Comments.
Try for 7 days

”The time we save is the biggest benefit of E-E to our team. What could take multiple guys 2 hours or more each to find is accessed in around 15 minutes on Experts Exchange.

-Mike Kapnisakis, Warner Bros