Войти

Показать полную графическую версию : WMI\VBS узнать размер папки


bombording
27-09-2013, 13:07
Добрый день.
Имеется скрипт сбора статистики с использованием VBS\WMI средств.
Скрипт собирает данные о параметрах компьютера и заносит их в csv файл.

Вопрос:
Возможно ли, что бы скрипт так же собирал информацию о размере определенной локальной папки? Скажем C:\Program Files\Work


Const ForAppending = 8
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
set objRefresher = CreateObject("WbemScripting.Swbemrefresher")
Set objProc = objRefresher.AddEnum _
(objWMIService, "Win32_PerfFormattedData_PerfOS_Processor").objectSet
Set objMemory = objRefresher.AddEnum _
(objWMIService, "Win32_PerfFormattedData_PerfOS_Memory").objectSet
Set objDiskSpace = objRefresher.AddEnum _
(objWMIService, "Win32_PerfFormattedData_PerfDisk_LogicalDisk").objectSet
Set objQueueLength = objRefresher.AddEnum _
(objWMIService, "Win32_PerfFormattedData_PerfNet_ServerWorkQueues").objectSet
Set objProcess = objRefresher.AddEnum _
(objWMIService, "Win32_PerfFormattedData_PerfProc_Process").objectSet
objRefresher.Refresh
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objLogFile = objFSO.OpenTextFile _
(".\performance.csv", ForAppending, True)
objLogFile.Write("Time;Proc;Mem;C:;D:;QDisk;QNet;") & VbCrLf
While (True)
objLogFile.Write(Now) & ";"
For each intProc in objProc
If intProc.Name = "_Total" Then
objLogFile.Write(intProc.PercentProcessorTime) & ";"
End If
Next
For each intAvailableBytes in objMemory
objLogFile.Write(intAvailableBytes.AvailableMBytes) & ";"
Next
For each intDiskSpace in objDiskSpace
If intDiskSpace.Name = "C:" or intDiskSpace.Name = "D:" Then
objLogFile.Write(intDiskSpace.FreeMegabytes) & ";"
End If
Next
intTotalHealth = 0
For each intQueueLength in objDiskSpace
intTotalHealth = intTotalHealth + intQueueLength.CurrentDiskQueueLength
Next
objLogFile.Write(intTotalHealth) & ";"
intTotalHealth = 0
For each intServerQueueLength in objQueueLength
intTotalHealth = intTotalHealth + intServerQueueLength.QueueLength
Next
objLogFile.Write(intTotalHealth) & ";"
For each intProcess in objProcess
If intProcess.PercentProcessorTime <> 0 and intProcess.Name <> "Idle" and intProcess.Name <> "_Total" Then
objLogFile.Write(intProcess.Name & ":" & intProcess.PercentProcessorTime) & ";"
End If
Next
objLogFile.Write VbCrLf
Wscript.Sleep 10000
objRefresher.Refresh
Wend
objLogFile.Close

Iska
27-09-2013, 19:04
Возможно ли, что бы скрипт так же собирал информацию о размере определенной локальной папки? Скажем C:\Program Files\Work »
Option Explicit

Dim strComputer
Dim strFolder

Dim objSWbemLocator
Dim objSWbemServicesEx


strComputer = "."
strFolder = "C:\Program Files\Far Manager"

Set objSWbemLocator = WScript.CreateObject("WbemScripting.SWbemLocator")
Set objSWbemServicesEx = objSWbemLocator.ConnectServer(strComputer, "root\cimv2")

WScript.Echo GetSizeOfFolder(objSWbemServicesEx.Get("Win32_Directory.Name='" & strFolder & "'"))

Set objSWbemServicesEx = Nothing
Set objSWbemLocator = Nothing

WScript.Quit 0
'=============================================================================

'=============================================================================
Function GetSizeOfFolder(objSWbemObjectEx_Win32_Directory)
Dim lngFileSize
Dim objSWbemObjectEx

lngFileSize = 0

For Each objSWbemObjectEx In objSWbemObjectEx_Win32_Directory.Associators_("Win32_SubDirectory", "Win32_Directory", "PartComponent")
lngFileSize = lngFileSize + GetSizeOfFolder(objSWbemObjectEx)
Next

For Each objSWbemObjectEx In objSWbemObjectEx_Win32_Directory.Associators_("CIM_DirectoryContainsFile", "CIM_DataFile")
lngFileSize = lngFileSize + objSWbemObjectEx.FileSize
Next

GetSizeOfFolder = lngFileSize
End Function
'=============================================================================

NB! Существование папки никак не проверяется.

Uranich
14-06-2016, 18:01
А подскажите, как можно сделать, чтобы скрипт при логоне считывал папку currentuser?

Задача стоит чтобы при логоне считытался размер папки пользователя и клался в виде тхт файла на сетевую шару. например имя файла - имя пк, а внутри логин и размер папки?

Iska
15-06-2016, 00:45
Uranich, и что будет, когда на той же машине зарегистрируется другой пользователь?! Прошлый файл уйдет в небытие. И что такое «папка currentuser»/«папка пользователя»?




© OSzone.net 2001-2012