VBscript获取用户的文档和桌面文件夹大小

我一直在网上search一个体面的脚本,让我收集Windows 7机器上的文件夹大小的子文件夹。 在C:\用户\用户名\文档和C:\用户\用户名\桌面上有大约50台电脑我想要获取文件夹大小。

我没有脚本经验(因此会开始学习),没有足够的知识来编辑他人的脚本。

我一直在努力的脚本如下。 如果有人能指出我正确的方向,我将非常感激。

' 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 

我知道这不会激起你的问题,但我会推荐如果你打开它的PowerShell。 这通常容易得多,只是给你一个例子…

这是一个链接,开始与: http : //technet.microsoft.com/en-us/library/ff730945.aspx

这里是他们的例子的修改版本:

 $colItems = (Get-ChildItem C:\users\username\desktop -recurse | Measure-Object -property length -sum) "{0:N2}" -f ($colItems.sum / 1MB) + " MB" 

更改C:\users\username\desktop的值,并告诉我您是否喜欢结果。 如果你愿意并且希望得到有关从远程计算机上循环和抓取数据的帮助,请告诉我。

脚本v1:这不是完美的,但我认为它会工作的大部分。 您需要下载Quest AD CMDlets,并将其安装在您要运行的系统上。 另外,您需要将执行策略设置为remotesigned。 然后将此脚本复制到本系统的本地驱动器。 您需要编辑三个值,$ rootou(这是您要search的OU)以及#Exportpath下的两行。 让我知道它是如何工作的。 或者如果你需要上传的脚本的副本。

 #Script used to gather data size of remote computers user profiles by Eric C. Singer #a generic powershell object used to group a collection of various objects into a single object $data = new-object psobject $columns = @" ComputerName ProfileName DocumentsSizeMB DesktopSizeMB "@ $columns -split "`n" |%{$data | add-member -membertype noteproperty -name $_.trim() -value $null} #Store a list of computers that we couldn't connect to $failedcomputers = New-Object System.Collections.ArrayList #Store the results of the gathered data $foldersize = New-Object System.Collections.ArrayList #Root OU that you want to start searching for computers $RootOU = "yourdomain.org/your ou/ your sub-ou" #Getting a list of all computers $allcomputers = Get-QADComputer -SearchRoot "$rootou" -SizeLimit 0 #Export paths $failedcomputersfiles = "c:\yourpath\yourfile.csv" $foldersizefile = "c:\yourpath\yourfile.csv" #Looping through each computer Foreach ($computer in $allcomputers) { #Seeing if we can connect to the computer, if not, we're going to add it to the failedcomputers array. If (Test-Path "\\$($computer.name)\c$") { #Setting the two possiable paths based on whether its Windows 7 or XP $Windows7ProfileRoot = "\\$($computer.name)\c$\Users" $WindowsXPProfileRoot = "\\$($computer.name)\c$\Documents and Settings" #if the computer is windows 7 run this, or go to the else statement If ($($computer.OSName) -like "Windows 7*") { #getting a list of profiles $allprofiles = Get-ChildItem $Windows7ProfileRoot | Where-Object {$_.PSIsContainer -eq $true} #Looping through each profile and running the following. Foreach ($user in $allprofiles) { $data.ComputerName = $computer.name $data.ProfileName = $user.name $userdesktop = (Get-ChildItem "$Windows7ProfileRoot\$($user.name)\desktop" -recurse | Measure-Object -property length -sum).sum / 1MB $userdocuments = (Get-ChildItem "$Windows7ProfileRoot\$($user.name)\documents" -recurse | Measure-Object -property length -sum).sum / 1MB $data.DesktopSizeMB = $userdesktop $data.DocumentsSizeMB = $userdocuments $data | Select-Object * | ForEach-Object {$foldersize.Add($_)} } } Else { $allprofiles = Get-ChildItem $WindowsXPProfileRoot | Where-Object {$_.PSIsContainer -eq $true} Foreach ($user in $allprofiles) { $data.ComputerName = $computer.name $data.ProfileName = $user.name $userdesktop = (Get-ChildItem "$WindowsXPProfileRoot\$($user.name)\desktop" -recurse | Measure-Object -property length -sum).sum / 1MB $userdocuments = (Get-ChildItem "$WindowsXPProfileRoot\$($user.name)\my documents" -recurse | Measure-Object -property length -sum).sum / 1MB $data.DesktopSizeMB = $userdesktop $data.DocumentsSizeMB = $userdocuments $data | Select-Object * | ForEach-Object {$foldersize.Add($_)} $data } } } Else { $failedcomputers.Add("$($computer.name)") } } $failedcomputers | Export-Csv $failedcomputersfiles -NoTypeInformation $foldersize | Export-Csv $foldersizefile -NoTypeInformation