Jak mogę określić, jak określić wolną powierzchnię twardego dysku w procentach?
Skrypciarze odpowiadają na Wasze pytania
Witamy w rubryce TechNet, w której Skrypciarze z firmy Microsoft odpowiadają na częste pytania dotyczące używania skryptów w administracji systemu. Jeśli macie jakieś pytania z tej dziedziny, zachęcamy do wysłania e-maila na adres: scripter@microsoft.com. Nie możemy zagwarantować odpowiedzi na każde otrzymane pytanie, ale staramy się jak możemy. |
Jak mogę określić, jak określić wolną powierzchnię twardego dysku w procentach?
Cześć Skrypciarze! Wiem, jak określić, jaka powierzchnia twardego dysku jest wolna, ale jak obliczyć, ile to procent całej powierzchni?
-- JP
Cześć JP. Masz rację: określenie wolnej powierzchni dysku to nie problem. Wystarczy taki prosty skrypt, by podać liczbę wolnych bajtów na dysku C:
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colDisks = objWMIService.ExecQuery _
("Select * from Win32_LogicalDisk Where DeviceID = 'C:'")
For Each objDisk in colDisks
Wscript.Echo objDisk.FreeSpace
Next
Mamy dobre wiadomości: określenie, ile to procent powierzchni jest niemal tak samo proste. Wymaga to tylko prostego obliczenia: powierzchnię dostępną trzeba podzielić przez całkowitą powierzchnię dysku. Posłużmy się przykładem bardzo małego, 10-bajtowego dysku, na którym 2 bajty są wolne. I tak, żeby procent wolnej powierzchni, podzielimy 2 przez 10 (wolna powierzchnia przez całkowita powierzchnia), otrzymując 0,20. Oznacza to 20% wolnej powierzchni na naszym mikroskopijnym dysku.
To proste równanie i mamy już jego połowę: właściwość FreeSpace klasy Win32_LogicalDisk podaje, ile jest wolnych bajtów na dysku. Drugą połowę też mamy, chociaż może jeszcze o tym nie wiecie: właściwość Size tej samej klasy podaje rozmiar dysku. Teraz wystarczy podzielić wartość FreeSpace przez wartość Size, i już mamy procent:
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colDisks = objWMIService.ExecQuery _
("Select * from Win32_LogicalDisk Where DeviceID = 'C:'")
For Each objDisk in colDisks
intFreeSpace = objDisk.FreeSpace
intTotalSpace = objDisk.Size
pctFreeSpace = intFreeSpace / intTotalSpace
Wscript.Echo pctFreeSpace
Next
Fajne, prawda? Problem z tym skryptem jest taki, że wyświetla on ułamek dziesiętny w rodzaju 0,22457268101427. Owszem, jest to dokładna wartość, ale nie za bardzo to czytelne. Użyjmy więc VBScriptowej funkcji FormatPercent, dzięki czemu uzyskamy bardziej czytelny format, na przykład 22,45%:
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colDisks = objWMIService.ExecQuery _
("Select * from Win32_LogicalDisk Where DeviceID = 'C:'")
For Each objDisk in colDisks
intFreeSpace = objDisk.FreeSpace
intTotalSpace = objDisk.Size
pctFreeSpace = intFreeSpace / intTotalSpace
Wscript.Echo FormatPercent(pctFreeSpace)
Next
O wiele lepiej!
I jeszcze jeden skrypt. Klasa Win32_LogicalDisk domyślnie sprawdza wszystkie dyski komputera, w tym napędy dyskietek, wymienne napędy Zip itp. Jeśli chcesz obliczyć wolną powierzchnię tylko na dyskach twardych, zmodyfikuj zapytanie WQL w ten sposób, by wybierało napędy o wartości DriveType równej 3 (co w świecie WMI oznacza właśnie twardy dysk). Innymi słowy:
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colDisks = objWMIService.ExecQuery _
("Select * from Win32_LogicalDisk Where DriveType = 3")
For Each objDisk in colDisks
intFreeSpace = objDisk.FreeSpace
intTotalSpace = objDisk.Size
pctFreeSpace = intFreeSpace / intTotalSpace
Wscript.Echo objDisk.DeviceID, FormatPercent(pctFreeSpace)
Next
Do początku strony