Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   WMI\VBS узнать размер папки (http://forum.oszone.net/showthread.php?t=268876)

bombording 27-09-2013 13:07 2224811

WMI\VBS узнать размер папки
 
Добрый день.
Имеется скрипт сбора статистики с использованием 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 2224996

Цитата:

Цитата bombording
Возможно ли, что бы скрипт так же собирал информацию о размере определенной локальной папки? Скажем 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 2642775

А подскажите, как можно сделать, чтобы скрипт при логоне считывал папку currentuser?

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

Iska 15-06-2016 00:45 2642847

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


Время: 07:18.

Время: 07:18.
© OSzone.net 2001-