Freien Festplattenplatz (remote) berechnen mit PowerShell

    Wenn man den freien Speicherplatz für einzelne Laufwerke auf dem lokalen Rechner ermitteln will, dann geht das recht einfach über den Explorer. Möchte man diese Informationen remote erfragen und vielleicht in Scripts weiterverarbeiten, dann empfiehlt sich der Einsatz von PowerShell.

    Die Belegung eines Laufwerks erhält man in PowerShell wie viele andere Systeminformationen über WMI. Zu diesem Zweck steht das Cmdlet Get-WMIObject zur Verfügung. Um Auskunft über den freien Speicher zu erhalten, kann man die WMI-Klassen Win32_Volume, Win32_LogicalDisk oder Win32_Share verwenden.

    Win32_Volume versus Win32_LogicalDisk

    Der Unterschied zwischen diesen Klassen besteht darin, dass Win32_Volume alle Volumes auflistet, auch wenn ihnen kein Laufwerksbuchstabe zugewiesen wurde. Allerdings ignoriert es Netzwerkfreigaben. Win32_Logical Disk zeigt dagegen alle Laufwerke, sofern sie eine Laufwerkskennung haben, darunter auch verbundene File Shares. Win32_Share schließlich zählt alle Freigaben eines Servers auf.

    In Hinblick auf die Ermittlung des freien Speicherplatzes ist die Verwendung der 3 genannten WMI-Klassen weitgehend gleich, so dass die folgenden Beispiele Win32_LogicalDisk verwenden. In der einfachsten Form sieht der Aufruf folgendermaßen aus:

    Get-WMIObject Win32_LogicalDisk | select name, freespace

    Dieser Befehl ermittelt den freien Speicher für alle gemounteten Volumes. Möchte man gezielt nur die Werte einzelner Laufwerke, dann kann man dies über einen solchen Filter erreichen:

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

    Konvertierung von Bytes in GB

    Das Ergebnis zeigt den Namen und den freien Speicher in Bytes. Die Darstellung der Größe in Bytes ist meistens nicht sehr hilfreich, so dass man für die Konvertierung in GB über die Daten aller Laufwerke iterieren muss:

    gwmi Win32_LogicalDisk | ForEach {$_.name, ($_.freespace / 1GB)}

    Dieser Aufruf verwendet das Alias gwmi für Get-WMIObject und teilt den freien Speicherplatz durch die Konstante 1GB, um den Wert in GB zu erhalten. Unschön an der damit erzielten Ausgabe sind indes die zahlreichen Nachkommastellen. Dies kann man mit Hilfe der truncate-Methode abschneiden.

    gwmi Win32_LogicalDisk | ForEach {$_.name, [math]::truncate($_.freespace / 1GB)}

    Wer die Angaben genauer, aber ohne Nachkommastellen haben möchte, kann freespace durch 1MB statt durch 1GB teilen.

    Freien Speicherplatz remote ermitteln

    Get-WMI-Object gehört zu den Cmdlets, die PowerShell-Remoting unterstützen. Daher können die Informationen über freien Festplattenspeicher mit Hilfe des Parameters -ComputerName auch remote eruiert werden:

    gwmi Win32_LogicalDisk -Computer MyPC|%{$_.name, [math]::truncate($_.freespace/1GB)}

    Im Fall von Win32_Share dürfte dies der Normalfall sein, weil man kaum die lokal freigegebenen Verzeichnisse abfragen möchte.

    2 Kommentare

    Bild von Andreas
    Andreas sagt:
    23. Dezember 2012 - 11:23

    Ich habe die Abfrage der Remoteplatten und Aufbereitung der Ausgabe mittels folgendem Befehl gelöst:

    Get-WmiObject -Class Win32_LogicalDisk -computer MYPC -Filter "DriveType=3" | Format-Table @{Label="Drive"; Expression={$_.DeviceID}; width=8}, @{Label="Size"; Expression={$_.Size / 1GB}; Format="000.0"; width=8}, @{Label="GB Free" ; Expression={$_.FreeSpace/1GB} ; Format="000.0" ; width=8} , @{Label="% Free" ; Expression={$_.FreeSpace * 100 /$_.Size}; Format="00.0" ; width=10}

    Gruss
    Andreas

    Bild von Chris
    Chris sagt:
    5. September 2014 - 10:38

    Cool
    SAUBERE UMSETZUNG!!!

    Danke