Update: This script has some issues (path not found) with users with very large home folders and or homefolders with long pathnames. This is due to limitations of the Filesystem Object. I will see if i can make a “better solution”.
Dave asked me for a script to enumerate all AD users, their home directories and the size of them.
I already had the script to do that for roaming profiles.
This script is a modified version.
Follow the next steps to run the script (admin rights needed for access to the home directories):
* open your favorite text editor
* copy and paste the script into the editor
* save the script (for example c:\temp\homedirectorysize.vbs)
* open a command prompt
* go to “c:\temp”
* give “cscript homedirectorysize.vbs” (without quotes) and enter
' Name : homedirectorysize.vbs ' Description : script to enumerate the home directories and their sizes of all users in Active Directory ' Author : dirk adamsky - deludi bv ' Version : 1.00 ' Date : 12-07-2011 ' Level : intermediate arrAttributes = Array("homeDirectory","displayname","mail") Set adoCommand = CreateObject("ADODB.Command") Set adoConnection = CreateObject("ADODB.Connection") adoConnection.Provider = "ADsDSOObject" adoConnection.Open "Active Directory Provider" adoCommand.ActiveConnection = adoConnection Set objRootDSE = GetObject("LDAP://RootDSE") strBase = "<LDAP://" & objRootDSE.Get("defaultNamingContext") & ">" Set objRootDSE = Nothing strFilter = "(&(objectCategory=person)(objectClass=user)(homeDirectory=*))" strAttributes = Join(arrAttributes,",") Wscript.Echo Join(arrAttributes,";") & " ; home directory size in MB" strQuery = strBase & ";" & strFilter & ";" & strAttributes & ";subtree" adoCommand.CommandText = strQuery adoCommand.Properties("Page Size") = 100 adoCommand.Properties("Timeout") = 30 adoCommand.Properties("Cache Results") = False Set adoRecordset = adoCommand.Execute Do Until adoRecordset.EOF On Error Resume Next strTempOutput = "" For i = 0 To Ubound(arrAttributes) strTempOutput = strTempOutput & " ; " & adoRecordset.Fields(arrAttributes(i)).Value strOutput = Mid(Ltrim(strTempOutput),3) Next Wscript.Echo strOutput & " ; " & Foldersize (adoRecordset.Fields(arrAttributes(0)).Value) & " MB" adoRecordset.MoveNext Loop adoRecordset.Close adoConnection.Close Set adoRecordset = Nothing Set adoConnection = Nothing Set adoCommand = Nothing Function Foldersize(strPath) On Error Resume Next Set objFSO = CreateObject("scripting.filesystemobject") Set objFld = objFSO.GetFolder(strPath) Foldersize = Round(objFld.Size/1048576,2) Set objFld = Nothing Set objFSO = Nothing End Function
When you have problems/questions please post a reply. Also can alo give a ‘star’ rating.
Dirk Adamsky – Deludi BV