Powershell: Podsumowanie wielości dysków

23-lis-2015

Biznes zwraca się z pyaniem „To ile właściwie mamy dysków i o jakim rozmiarze w serwerze XXX?”. Wchodzisz na serwer i widzisz dyski C: D: E: F: G: H: I: J:….., no przecież nie będę tego liczyć na piechotę!

Zaczynamy od

Get-WmiObject win32_logicaldisk

disk01

Wynik już mamy, ale w bajtach i dla każdego dysku oddzielnie.

W takim razie najpierw przeliczmy bajty na gigabajty. W tym celu posłużymy się wyrażeniem Select tworzącym nowe, wyliczane kolumny:

Get-WmiObject win32_logicaldisk | 
Select DeviceID,@{n='SizeGB';e={$_.Size/1GB,2}},
 @{n='FreeGB';e={$_.FreeSpace/1GB}}
disk02

Wynik w gigabajtach, ale ta zmienna ilość miejsc po przecinku jest przerażająca a na dodatek ciągle wynik nie jest posumowany. Skorzystajmy z .NET-owej metody Math.Round. Żeby w powershell skorzystać z funkcji .NET (w tym przypadku funkcji statycznej czyli wywoływanej na rzecz klasy a nie obiektu) należy użyć zapisu [Math]::Round(wartość,ilość_miejsc_po_przecinku). To nowa postać polecenia:

Get-WmiObject win32_logicaldisk | 
Select DeviceID,@{n='SizeGB';e={[Math]::Round($_.Size/1GB,2)}},
 @{n='FreeGB';e={[Math]::Round($_.FreeSpace/1GB,2)}}

disk03

O, już prawie! Rozmiary są podawane z dokładnością do 2 miejsc po przecinku Gdyby klient chciał zobaczyć zestawienie z dokładnością do każdego dysku, to na tym można by zakończyć. Ale my chcemy zobaczyć sumę dla wszystkich dysków razem. Poleceniem, które potrafi wyliczyć sumę jest Measure-Object:

Get-WmiObject win32_logicaldisk | 
Select DeviceID,@{n='SizeGB';e={[Math]::Round($_.Size/1GB,2)}},
 @{n='FreeGB';e={[Math]::Round($_.FreeSpace/1GB,2)}} |
Measure -Sum -Property SizeGB,FreeGB

disk04

Super, tylko może po co wyświetlać informacje o Count, Average, Maximum itp.? Dodajmy więc ostatni krok. Będzie to Select, który wyświetli tylko nazwę SizeGB lub FreeGB czyli 'Property’ oraz odpowiednie wyliczone wartości czyli 'Sum’. Ponieważ jednak Sum jest słowem kluczowym, to budując ostatniego Select w liście wybieranych właściwości słowo Sum musi być w apostrofach:

Get-WmiObject win32_logicaldisk | 
Select DeviceID,@{n='SizeGB';e={[Math]::Round($_.Size/1GB,2)}},
 @{n='FreeGB';e={[Math]::Round($_.FreeSpace/1GB,2)}} |
Measure -Sum -Property SizeGB,FreeGB | 
Select Property,'Sum'

disk05

Od tej pory ilekroć klient zapyta o to ile ma powierzchni dyskowej lub ile ma wolnego miejsca wystarczy uruchomić ostatnie polecenie. A jeśli zechce zobaczyć zestawienie z podziałem na dyski, to skorzystaj z polecenia generującego wynik widoczny na ilustracji (3).

Kurs powershell dla administratora

 

Kompletny kurs Powershell dla administratorów Windows

 

 

 

Komentarze:

  1. Kurs Powershell dla początkujących: Informacja dla studentów | Kursy OnlineKursy Online napisał,

    […] Powershell: Podsumowanie wielości dysków […]

Autor: Rafał Kraik