Auflisten des freien Speicherplatzes mit Hilfe der Windows PowerShell

Wie viel freien Speicher hat das Windows System noch!

Überblick

Wie viel Speicherplatz ist auf dem System noch vorhanden? Eine Fragen, mit der man es bei der Administration eigentlich täglich zu tun hat. Sei es jetzt man hat ein NAS System (Anzeige)*, einen Webserver oder eine einfache Festplatte (Anzeige)*. Natürlich kann man sich mit dem Explorer den Speicherplatz für Laufwerke sehr einfach anzeigen lassen. Aber wie so oft bietet die neue Windows PowerShell viel mehr Möglichkeiten wie z.B. die Ausgabe in einem Script weiterzuverarbeiten oder per Remote Zugriff zu arbeiten.

Den Speicherplatz auflisten

Informationen erhält man über die WMI (Windows Management Instrumentation). Bei WMI handelt es sich um eine grundlegende Windows-Verwaltungstechnologie mit welchen lokale Computer sowie auch Remotecomputer verwaltet werden können. Mit WMI werden Statusinformationen ausgegeben, die sich eignen um verschiedene administrative Aufgaben zu tätigen. WMI sind im Prinzip Objekte, die aus bestimmten Klassen zusammengesetzt werden. Die Windows PowerShell beinhaltet das Cmdlet Get-WMIObject, womit man sämtliche Klassen aufrufen kann. Zum Auslesen des freien Speicherplatzes gibt es die drei in der Tabelle vorgestellten Klassen.

WMIObject KlassenBeschreibung
Win32_VolumeListet alle Volumes auf, auch wenn diese keinen Laufwerkbuchstaben besitzen
Win32_LogicalDiskHiermit werden alle Laufwerke inklusive Netzlaufwerk angezeigt.
Win32_ShareDiese Klasse zeigt dagegen nur die Freigaben an.

Weil die Windows PowerShell eine einheitliche Syntax hat, ist diese für alle Klassen gleich. Nachfolgend möchte ich  euch anhand von Win32_LogicalDisk einige Anwendungen aufzeigen.

Ausgabe des belegten Speicherplatzes

Ein einfacher Aufruf der Klasse Win32_LogicalDisk über das Cmdlet Get-WmiObject liefert die folgende Ausgaben. Leicht zu erkennen ist, dass der freie Speicherplatz in einer sehr langen Zahlenreihe dargestellt wird.

Get-WmiObject Win32_LogicalDisk
Speicherplatzverbrauch mit der Windows PowerShell auflisten: Get-WMIObject

Über die Verwendung der PowerShell Pipe, kann man direkt den Speicherverbrauch ausgeben.

Get-WMIObject Win32_LogicalDisk | select name, freespace
Speicherplatzverbrauch mit der Windows PowerShell auflisten: Get-WMIObject

Ersichtlich ist hier, dass der Speicherplatz aller eingebundenen Volumes aufgelistet wird. Sofern man nur ein bestimmtes Laufwerk möchte, dann muss man die Ausgabe filtern.

Get-WMIObject Win32_LogicalDisk -filter "name='c:'" | select name, freespace

Übrigens kann man den Speicherplatz auch von einem entfernten PC (also Remote) auslesen. Hierfür muss man nur den Computernamen anhängen und das Ergebnis über die Pipe auswerten.

Get-WMIObject Win32_LogicalDisk -Computer PC12 | % {$_.name, $_.freespace }

Belegten Speicherplatz in GB anzeigen

Wie die obigen Ausgaben zeigen, wird das Ergebnis immer in Bytes ausgegeben. Damit fällt es einem schwer, den verbrauchten Speicherplatz schnell zu erkennen. Sinnvoller ist es, wenn man das Ergebnis einfach in GigaByte umrechnet. Mit der Windows PowerShell geht das relativ einfach. Man muss prinzipiell nur durch 1GB teilen.

Get-WMIObject Win32_LogicalDisk | % {$_.name, ($_.freespace / 1GB) }

Das Ergebnis sieht nun schon eindeutiger aus.

Speicherplatzverbrauch mit der Windows PowerShell auflisten: Umrechnung auf GB

Fazit

Auch zum auslesen des verbrauchten Speicherplatzes bietet die Windows PowerShell eine schöne Möglichkeit. Kern des ganzen sind hier die WMI Objekte. Mit diesen lassen sich sehr viele Informationen aus dem System holen und natürlich auch weiterverarbeiten. Ich denke anhand des obigen Anwendungsfalls kann man sehr einfach die Funktionsweise und Anwendung der WMI-Objekte verstehen.

Interessantes

4 Kommentare

  1. Ein paar meiner Server haben mehr als 1000 gb (> 1TB), und ab der größe zeigt mir Powershell das so an: 1,400 also mit einem “,” wenn ich den wert in eine Tabelle speicher und damit weiter rechne bekomme ich falsche informationen. Kann ich das so formatieren das 1.400 steht statt 1,400 ?

    Hier mein Code:

    $GesamtSpeicher = “{0:N2}” -f ((gwmi win32_logicaldisk -Computername $hostname -Filter “DeviceID=’$DeviceID'”).size/1GB)

    • Hallo Fabian,
      also wenn es um die reine Änderung von “,” auf “.” geht, so könnte man das mit einem -replace (“,”,”.”) bewerkstelligen. Z.B. so: Get-WmiObject Win32_LogicalDisk | % {$_.name, ($_.size / 1TB) -replace (",",".")} .
      Umrechnung Speichergröße

  2. Ich habe auf meinem Laufwerk C: einige Festplatten als Ordner eingebunden, wie frage ich hier den freien Speicher ab.
    Was mich auch interessieren würde wie fragen Installationsroutinen so etwas ab. Einige haben mit solchen über Ordner eingebundene Medien Probleme den freien Speicher auszulesen, und nehmen das Laufwerk auf dem der Ordner eingebunden ist als Anhaltspunk.
    MfG Sebastian

    • Hallo Sebastian, wenn ich dich recht verstehe, meist du das auflisten des freien bzw. verbrauchten Speicherplatzes eines Netzlaufwerks? Hierfür kannst du einfach Get-PSDrive -Name [Laufwerksbuchstabe] verwenden.

Kommentar hinterlassen

E-Mail Adresse wird nicht veröffentlicht.


*