Articoli

Windows Management Instrumentation: amministrare l'OS Windows (Seconda parte)

di Mauro Magni

thumbnail

04

Nov

2005

Utilizzando l’ambiente WMI (Windows Management Instrumentation) vedremo come visualizzare le informazioni dei dischi fissi presenti su uno o più computer.


Elenco dei dischi fissi

Lo script seguente elenca le proprietà di tutti i dischi logici presenti su uno o più computer utilizzando la classe Win32_LogicalDisk .

strComputer = "." Wscript.Echo "=== Logical disk enumeration ===" & date() & "  " & time() Wscript.Echo " " Set objWMIService = GetObject("winmgmts:" _  & "{impersonationLevel=impersonate}!\\"  & strComputer & "\root\cimv2") Set colDisks = objWMIService.ExecQuery _  ("SELECT * FROM Win32_LogicalDisk") For each objDisk in colDisks  Wscript.Echo "="  Wscript.Echo "Device ID ........... "   & objDisk.DeviceID  Wscript.Echo "Drive Type .......... "   & objDisk.DriveType  Wscript.Echo "MediaType ........... "   & objDisk.MediaType  Wscript.Echo "Description ......... "   & objDisk.Description  Wscript.Echo "Size ................ "   & objDisk.Size/(1024*1024)   & " Mb"  Wscript.Echo "FreeSpace ........... "   & objDisk.FreeSpace/(1024*1024)   & " Mb"  Wscript.Echo "FileSystem .......... "   & objDisk.FileSystem  Wscript.Echo "VolumeName .......... "   & objDisk.VolumeName  Wscript.Echo "VolumeSerialNumber .. "   & _  objDisk.VolumeSerialNumber Next

Se un’istruzione supera la lunghezza di una riga,per andare a capo si usa il carattere "_" (underline).
Per ogni disco logico lo script visualizza le informazioni fondamentali.
Eseguendo lo script si ottiene un output simile al seguente:

=== Logical disk enumeration ===  05/10/2005  16.15.4 = Device ID ........... C: Drive Type .......... 3 MediaType ........... 12 Description ......... Disco rigido locale Size ................ 4533,015625 Mb FreeSpace ........... 2752,5625 Mb FileSystem .......... NTFS VolumeName .......... VolumeSerialNumber .. 18003A25 = Device ID ........... D: Drive Type .......... 3 MediaType ........... 12 Description ......... Disco rigido locale Size ................ 5005,54296875 Mb FreeSpace ........... 2842,71875 Mb FileSystem .......... NTFS VolumeName .......... VolumeSerialNumber .. 00B86B29 = Device ID ........... E: Drive Type .......... 5 MediaType ........... 11 Description ......... Disco CD-ROM Size ................  Mb FreeSpace ...........  Mb FileSystem .......... VolumeName .......... VolumeSerialNumber ..

Si nota che Drive Type assume il valore 3 per i dischi fissi e 5 per i cdrom. Se desideriamo visualizzare solamente i dischi fissi è necessario modificare la riga da

Set colDisks = objWMIService.ExecQuery _  ("SELECT * FROM Win32_LogicalDisk")

a

Set colDisks = objWMIService.ExecQuery _  ("SELECT * FROM Win32_LogicalDisk   WHERE DriveType = 3")

All’istruzione SELECT è stata aggiunta una parte di codice(where DriveType = 3) che serve per selezionare solamente le unità disco.
Se vogliamo restringere ancora di più il campo della selezione è sufficiente utilizzare gli operatori booleani (AND oppure OR) come segue:

Set colDisks = objWMIService.ExecQuery _  ("SELECT * FROM Win32_LogicalDisk   WHERE DriveType = 3 and Mediatype>10")

L’istruzione SELECT estrae i dati riguardanti i dischi fissi che hanno un valore del campo MediaType più grande di 10.


Monitor del page file

Il codice seguente controlla l’utilizzo del page file utilizzando la classe Win32_PageFileUsage .

strComputer = "." Set objWMIService = GetObject("winmgmts:" _  & "{impersonationLevel=impersonate}!\\"  & strComputer & "\root\cimv2") Set colPageFiles = objWMIService.ExecQuery _  ("SELECT * FROM Win32_PageFileUsage") For each objPageFile in colPageFiles  Wscript.Echo "Allocated Base Size: "   & objPageFile.AllocatedBaseSize  Wscript.Echo "CurrentUsage: "   & objPageFile.CurrentUsage  Wscript.Echo "Description: "   & objPageFile.Description  Wscript.Echo "InstallDate: "   & objPageFile.InstallDate  Wscript.Echo "Name: "   & objPageFile.Name  Wscript.Echo "PeakUsage: "   & objPageFile.PeakUsage Next

Eseguendo lo script si ottiene un risultato simile al seguente:

Allocated Base Size: 1024 CurrentUsage: 90 Description: D:\pagefile.sys InstallDate: 20030412153952.832131+120 Name: D:\pagefile.sys PeakUsage: 90

Questo script può servire per tenere sotto controllo i page file di una rete di computer.
Per configurare invece le proprietà dei page file di un computer possiamo utilizzare il seguente script:

strComputer = "." Set objWMIService = GetObject("winmgmts:" _ & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") Set colPageFiles = objWMIService.ExecQuery _ ("SELECT * FROM Win32_PageFileSetting") For Each objPageFile in colPageFiles objPageFile.InitialSize = 200 objPageFile.MaximumSize = 800 objPageFile.Put_ Next

Come si nota dallo script la classe da utilizzare è Win32_PageFileSetting ed il metodo Put_ modifica la configurazione dei pagefile di uno o più computer.