lunedì 18 luglio 2011

VBScript: come tenere traccia dello spazio dischi su Windows Server 2003, 2008 e 2008 R2 - Lo Scriptomane - livello BASE

A volte ci si trova a chiedersi perchè un processo fallisca o a quale punto fallisca (esempio tipico: un piano di manutenzione di SQL server) oppure, per qualsiasi altro motivo, qual'è il momento esatto in cui si riempie un disco.

Altre volte, si vuole semplicemente monitorare la situazione dei dischi, tenendone traccia. Ad esempio quando si vuole calcolare la business growth per la stima della scalabilità del sistema di file server/s.

Per tutte queste ed altre necessità, è sufficiente un piccolo script, schedulato ad intervalli più o meno vicini, che permette di avere un log con data ed ora di ciascuna rilevazione.

In calce trovate lo script completo, basta copiarlo ed incollarlo in file di testo, salvandolo come .vbs



Ma vediamone insieme ciascun pezzo:

Option Explicit
Dim iSpc, strComputer, objWMIService
Dim fso, fsHandle, MyShell,LogFileName, colItems, objItem


DICHIARIAMO LA MODALITA' DI ESECUZIONE "STILE VB6""" " E LE VARIABILI INIZIALI


Set MyShell = CreateObject("Wscript.Shell")

CREIAMO UN OGGETTO SHELL (la tanto amata shell)

Set fso = Wscript.CreateObject("Scripting.FilesystemObject")

CREIAMO UN OGGETTO FILESYSTEM: CI SERVIRA' PER CREARE E SCRIVERE IL FILE DI LOG

LogFileName= MyShell.SpecialFolders("Desktop") & "\FreeSpace.txt"
set fsHandle = fso.OpenTextFile (LogFileName,8,True)

DEFINIAMO IL NOME DEL LOG, CHE VERRA' SALVATO SUL DESKTOP PER COMODITA'

strComputer = "."

IL COMPUTER E' IL LOCALE (.)
 
Set objWMIService = GetObject _
( "winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery _
("Select * From Win32_LogicalDisk Where DriveType = 3")

Creiamo le collections con le query WMI, ottenendo tanti oggetti disco quanti sono i dischi LOCALI (DriveType=3).

For Each objItem in colItems
 
iSpc = cDbl(iSpc) + cDbl(objItem.FreeSpace)
iSpc= iSpc/1024
iSpc= iSpc/1024
iSpc= iSpc/1024
iSpc= FormatNumber(iSpc,1)
fsHandle.Writeline Now & " -- " & objItem.DeviceID & " -- " & iSpc & " GB Spazio Libero"
 
Next

PER CIASCUNA VOCE:
  1. convertiamo il valore della proprietà FreeSpace in una variabile DOUBLE con cDbl
  2. lo dividiamo 3 volte per 1024 (1 GB = 1024 MB, 1 MB = 1024KB, 1KB = 1024 Bytes) perchè il valore fornito è in Bytes.
  3.  Lo formattiamo come intero
  4. lo scriviamo in una nuova linea con il valore della data e ora attuali (Now), la lettera (DeviceID) e lo spazio libero calcolato in GB.



fsHandle.Writeblanklines 1
fsHandle.close
set MyShell = Nothing
set fso = Nothing

Scriviamo una riga bianca, chiudiamo il file ed annulliamo gli oggetti, per liberare la memoria.



Ed eccolo qui, pronto per Voi:

################# INIZIO ####################

Option Explicit
Dim iSpc, strComputer, objWMIService
Dim fso, fsHandle, MyShell,LogFileName, colItems, objItem
Set MyShell = CreateObject("Wscript.Shell")
Set fso = Wscript.CreateObject("Scripting.FilesystemObject")
LogFileName= MyShell.SpecialFolders("Desktop") & "\FreeSpace.txt"
set fsHandle = fso.OpenTextFile (LogFileName,8,True)

strComputer = "."

Set objWMIService = GetObject _
( "winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery _
("Select * From Win32_LogicalDisk Where DriveType = 3")

For Each objItem in colItems
'recupera le info e converti da uint64
iSpc = cDbl(iSpc) + cDbl(objItem.FreeSpace)
iSpc= iSpc/1024
iSpc= iSpc/1024
iSpc= iSpc/1024
iSpc= FormatNumber(iSpc,1)
fsHandle.Writeline Now & " -- " & objItem.DeviceID & " -- " & iSpc & " GB Spazio Libero"
Next

fsHandle.Writeblanklines 1
fsHandle.close
set MyShell = Nothing
set fso = Nothing


############FINE ###############

Nessun commento:

Posta un commento

I commenti sono soggetti a moderazione, prima di essere pubblicati.

Qualsiasi contenuto illecito, immorale o che io ritenga (arbitrariamente) offensivo od inappropriato, verrà cancellato.