Pchełki Powershell: wolne miejsce na dyskach

https://xpil.eu/5oh

Sposobów na sprawdzenie ilości wolnego miejsca na dysku jest dużo. Najprościej uruchomić okno Eksploratora i rzucić okiem.

Niedawno jednak naszła mnie potrzeba napisania aplikacji konsolowej, która wyświetlałaby mi informację o wolnym miejscu na wybranych dyskach w następujący sposób:

C:\ XXX GB free, YYY GB used
D:\ ZZZ GB free, VVV GB used

i tak dalej.

Po kilku nieudanych próbach napisania tego w "zwykłym" .bat spróbowałem z PowerShell. Najpierw wyguglałem możliwość użycia WMI Instrumentation, ale rozwiązanie było trochę za bardzo skomplikowane.

Zagadałem więc do znajomego, który siedzi w branży serwerowej. Nie wiem dokładnie czym się gość zajmuje, ale wiem, że jak mam jakiekolwiek pytanie dotyczące zarządzania serwerami (głównie linuksowymi, ale nie tylko), facet na 99% będzie miał odpowiedź od ręki.

Istotnie, miał: magiczne polecenie Get-PSDrive

Całość kodu wygląda tak:

While($true) {
	Clear-Host
	ForEach($Disk in $(Get-PSDrive E, F, G, H)) {
		Write-Host $Disk.Root $('{0:N0}' -f $($Disk.Free/(1024*1024*1024)))'GB free,'$('{0:N0}' -f $($Disk.Used/(1024*1024*1024)))'GB used'
	}
	Start-Sleep -s 10
}

Jeszcze raz, tym razem z lepiej "połamanymi" liniami, na małe ekrany:

While($true) {
	Clear-Host
	ForEach($Disk in $(Get-PSDrive E, F, G, H)) {
		Write-Host `
			$Disk.Root `
			$('{0:N0}' -f $($Disk.Free/(1024*1024*1024))) `
			GB free `
			$('{0:N0}' -f $($Disk.Used/(1024*1024*1024))) `
			GB used
	}
	Start-Sleep -s 10
}

A oto efekt:

powershell-diskfree-01

Jeżeli ktoś jest zainteresowany szczegółowymi objaśnieniami, zapraszam do komentarzy.

https://xpil.eu/5oh

11 komentarzy

  1. Ja na „starym” laptopie mam Samurize, które pokazuje mi co chcę o dyskach na żywo. Oprócz tego id i siłę Wifi, obciążenie procka, naładowanie baterii i takie tam… Tu masz opisany program i alternatywy do niego (skądinąd fajna stronka, polecam się pobawić na niej trochę 😉 ): http://alternativeto.net/software/samurize/

    1. Takich aplikacji jest na pęczki. Ale to są programy innych dostawców, a ja potrzebowałem zmajstrować coś na szybko i przy użyciu wyłącznie wbudowanych w system narzędzi.

    1. Przed chwilą sprawdziłem sobie z nudów kto i kiedy zamieścił pięciotysięczny komentarz na moim blogu. Okazało się, że to właśnie ten tutaj powyżej. Gratuluję! Nagród póki co nie przewiduję, ale satysfakcji Ci już nikt nie odbierze 😉

    2. Właśnie tego szukałem ! 😀 Jesteś wybawca dla mnie 😀 Nigdy nie pisze komentarzy ale teraz byłoby grzechem nie podziekować ! DZIEKI!!!!!
      A jak zrobić zeby wynik wrzucic do txt?

      1. Jeżeli chcesz do pliku tekstowego, to po pierwsze musisz się pozbyć zewnętrznej, nieskończonej pętli (While($true)), po drugie wywalić czyszczenie ekranu (Clear-Host) a po trzecie zamienić Write-Host na Write-Output i dodać na końcu przekierowanie do pliku, o tak:

        ForEach($Disk in $(Get-PSDrive E, F, G, H)) {
        		Write-Output $Disk.Root $('{0:N0}' -f $($Disk.Free/(1024*1024*1024)))'GB free,'$('{0:N0}' -f $($Disk.Used/(1024*1024*1024)))'GB used' >> c:\jakisplik.txt
        	} 
        1. Oj, pospieszyłem się, powyższe nie zadziała. Spróbuj tego:

          $out = ""
          Write-Output $out > 1.txt
          ForEach($Disk in $(Get-PSDrive E, F, G, H)) {
              $out += $Disk.Root
              $out += $('{0:N0}' -f $($Disk.Free/(1024*1024*1024))) 
              $out += "GB free"
              $out += $('{0:N0}' -f $($Disk.Used/(1024*1024*1024)))
              $out += "GB used"
              $out += "`n"
          }
          Write-Output $out >> 1.txt
          

          Pewnie można krócej, pokombinuj sobie.

        2. Bardziej chodzi mi o to polecenie jest dal mnie bardzo dobre „get-psdrive -psprovider filesystem” jak zapisać wynik tego do pliku np txt. Towje rozwiązanie również działa 😉 ale ciekaw jestem jak z tamtym poleceniem mozna sobie poradzić.

              1. Nie mo żli we ! 😀 da się tak 😉 oczywiście że szukałem i nie trzeba robić ze mnie idio** ale jak sam Pan widzi na Pana stronie znalazłem takie rozwiązania które są o wiele łatwiejsze. Skrypt mam na wysyłanie drogą mailową chciałem go jakoś uprościć i połączyć z wyświetlaniem danych o wolnej przestrzeni dyskowej ale jednak już tu chyba pomocy nie uzyskam nie mniej jednak dziękuje za pomoc.
                Pozdrawiam.

Leave a Comment

Komentarze mile widziane.

Jeżeli chcesz do komentarza wstawić kod, użyj składni:
[code]
tutaj wstaw swój kod
[/code]

Jeżeli zrobisz literówkę lub zmienisz zdanie, możesz edytować komentarz po jego zatwierdzeniu.