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
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}}
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)}}
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
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'
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).
Kompletny kurs Powershell dla administratorów Windows
Komentarze:
[…] Powershell: Podsumowanie wielości dysków […]