Ü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 Klassen | Beschreibung |
---|---|
Win32_Volume | Listet alle Volumes auf, auch wenn diese keinen Laufwerkbuchstaben besitzen |
Win32_LogicalDisk | Hiermit werden alle Laufwerke inklusive Netzlaufwerk angezeigt. |
Win32_Share | Diese 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

Über die Verwendung der PowerShell Pipe, kann man direkt den Speicherverbrauch ausgeben.
Get-WMIObject Win32_LogicalDisk | select name, freespace

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.

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
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 (",",".")}
.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.