I've been scouring the web for a decent script to allow me to gather folder sizes of subfolders on Windows 7 machines. There's roughly 50 computers I want to get folder sizes on C:\Users\username\Documents and C:\Users\username\Desktop).
I have no scripting experience (will start learning because of this) and don't have enough knowledge to edit another person's script.
The script I've been working off of is below. And if anyone can point me in the right direction I would be very grateful.
' Name : localprofiles.vbs
' Description : script to enumerate the local profile size of all computers and users in Active Directory
' Author : dirk adamsky - deludi bv
' Version : 1.00
' Date : 28-06-2011
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") & ">"
strFilter = "(&(objectCategory=computer)(|(operatingSystem=Windows XP Professional)(operatingSystem=Windows 7*)))"
strAttributes = "name, operatingSystem"
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
strHostname = adoRecordset.Fields("name").Value
If CheckStatus(strHostname) = True Then
If Instr(adoRecordset.Fields("operatingSystem").Value, "XP") > 0 Then
strLocalProfilePath = "\Documents and Settings\"
ElseIf Instr(adoRecordset.Fields("operatingSystem").Value, "7") > 0 Then
strLocalProfilePath = "\users\"
End If
GetLocalProfileSize strHostname, "\\" & strHostname & "\c$" & strLocalProfilePath
End If
adoRecordset.MoveNext
Loop
adoRecordset.Close
adoConnection.Close
Set adoRecordset = Nothing
Set objRootDSE = Nothing
Set adoConnection = Nothing
Set adoCommand = Nothing
Function CheckStatus(strAddress)
Dim objPing, objRetStatus
Set objPing = GetObject("winmgmts:{impersonationLevel=impersonate}").ExecQuery _
("select * from Win32_PingStatus where address = '" & strAddress & "'")
For Each objRetStatus In objPing
If IsNull(objRetStatus.StatusCode) Or objRetStatus.StatusCode <> 0 Then
CheckStatus = False
Else
CheckStatus = True
End If
Next
Set objPing = Nothing
End Function
Function GetLocalProfileSize(strTargetMachine, strFolder)
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFSO.GetFolder(strFolder)
For Each SubFolder in objFolder.SubFolders
Logprint strTargetMachine & " ; " & SubFolder.Name & " ; " & SubFolder.Path & " ; " & Round(SubFolder.Size/1048576,2) & " MB"
Next
Set objFolder = Nothing
Set objFSO = Nothing
End Function
Function LogPrint(Message)
Const ForAppending = 8
strDate = Replace(Date,"/","-")
Set ObjFSO = CreateObject("Scripting.FileSystemObject")
Set objTextFile = ObjFSO.OpenTextFile("c:\temp" & strDate & "-localprofiles.csv", ForAppending, True)
objTextFile.WriteLine Message
objTextFile.Close
Set objTextFile = Nothing
Set ObjFSO = Nothing
End Function
Best Answer
I know this won't anser your question for vbscript, but I would recommend powershell if you're open to it. It's typically much easier, just to give you an example...
Here is a link to start out with: http://technet.microsoft.com/en-us/library/ff730945.aspx
and here is a modified version of their example:
Change the values in
C:\users\username\desktop
and tell me if you like the results. If you do and want help with looping and grabbing the data from remote computers, let me know.Script v1: It's not perfect, but i think it will work for the most part. You'll need to download Quest AD CMDlets and install it on the system you're going to run this from. Also, you'll need to set your execution policy to remotesigned. Then copy this script to the local drive of this system. You'll need to edit three values, the $rootou (this is your OU that you want to search), and the two lines under #Export paths. Let me know how it works. or if you need a copy of the script uploaded.