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.

Skomentuj Marcin Anuluj pisanie odpowiedzi

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.