cutimage - Fotolia

PowerShell: Cmdlets für Zugriff und Verwaltung von Storage

Die Microsoft PowerShell ist das universelle Werkzeug für den Administrator, auch wenn es Speicher zu verwalten und Abläufe zu automatisieren gilt.

Die Microsoft PowerShell wurde 2007 eingeführt und ist eine objektorientierte Programmier- und Skriptsprache. Schon vor der Zeit der PowerShell konnten Nutzer von der Kommandozeile aus Dateien, Festplatten und Volumen ihrer Windows-Systeme verwalten. Allerdings gestaltete sich dies immer recht umständlich und erinnerte zeitweise an die archaischen Kommandos der ersten Unix-Shells.

Die PowerShell hat dies deutlich vereinfacht. So haben die Microsoft-Entwickler seit der Version 4 in dieser Skripting-Sprache immer mehr Cmdlets (gesprochen Command-let) bereitgestellt, die das Arbeiten rund um die Themen Speicher und Dateien erleichtern.

Eine standardisierte Syntax und Möglichkeiten wie das Verbinden der Cmdlets durch Mechanismen wie die Pipeline lassen die PowerShell zum idealen Tool für die Systembetreuer werden. Hier ein kurzer Überblick über einige Cmdlets, die den Administratoren zur Verfügung stehen, wenn es um die Verwaltung von Speicher und Dateien geht.

Festplatten und Speicher-Pools im Griff behalten

Wer früher von der Kommandozeile her auf die Festplatten seiner Systeme zugreifen wollen, hat in der Regel dazu das Kommando diskpart eingesetzt – das auch unter Windows 10 noch zur Verfügung steht. Schon in frühen PowerShell-Versionen stand das Cmdlet Get-Disk zur Verfügung. Der Aufruf Get-Disk zeigt alle Festplatten, auf die auch das Betriebssystem direkt zugreifen kann. Je nach Konfiguration des Systems werden so manchmal nur das Boot-Laufwerk und ein eventuell vorhandener Storage-Pool auf dem System angezeigt. Zudem gibt das Get-Disk-Cmdlet immer auch alle Karten-Slots (beispielsweise für SD-Karten) mit aus, die auf dem System eventuell vorhanden sind.

Wer also Informationen zu allen physikalisch in seinem System vorhandenen Festplatten benötigt, sollte lieber das Cmdlet Get-PhysicalDisk verwenden. Dieses Kommando bringt dazu eine weitere Information mit auf den Bildschirm. In der Kolumne CanPool kann der Administrator sehen, ob die entsprechende Speichergerät Teil eines Speicherpools sein kann oder nicht.

Abbildung 1: Das bekannte Get-Disk-Cmdlet zeigt auch eventuell vorhandene Anschlüsse für Flash-Drives im System mit an, ist aber nicht immer so informativ wie gewünscht.

Werden alle Platten mit dem Wert „False“ angezeigt, so kann es durchaus sein, dass auf dem System bereits ein solcher Pool angelegt wurde und die Platten bereits Mitglieder dieses Pools sind. Wer feststellen will, welche der Platten in seinem System in einem Pool aufgenommen werden können, kann dazu den folgenden Aufruf einsetzen:

Get-PhysicalDisk -CanPool $True

Die Windows Storage Spaces (oder „Speicherplätze“) in denen die Speicherpools erstellt werden, verwenden das Storage-Subsystem von Windows zu Verwaltungszwecken. Wer also Speicherplätze mittels der PowerShell anlegen will, benötigt den Namen beziehungsweise den sogenannten „FriendlyName“ des Storage-Subsystems. Das folgende Cmdlet zeigt diesen mitsamt dem Status des Storage-Subsystems an:

Get-StorageSubsystem

Mit Hilfe dieses Namens und des Cmdlets New-StoragePool können Administratoren dann einen solchen Speicherbereich anlegen. Diese Tätigkeit muss wiederum mit einer PowerShell durchgeführt werden, die im administrativen Kontext arbeitet. Grundsätzlich benötigt der Administrator dann drei Informationen, um das Cmdlet erfolgreich auszuführen: Den „FriendlyName“ des neuen Storage-Pools, den er selbst wählen kann, den bereits erwähnten „FriendlyName“ des Subsystems und nicht zuletzt die Bezeichnungen der physikalischen Festplatten, die Teil des Storage-Pools werden sollen.

Abbildung 2: Storage-Pools erstellen mittels PowerShell Cmdlet New-StoragePool sollten die richtigen physikalischen Festplatten ansprechen.

Fast alle Beispiele im TechNet und auf anderen Blogs zu diesem Thema wenden dazu den bereits erwähnten Aufruf des Cmdlets Get-PhysicalDisk an, um die Platten aufzulisten, die zu einem Pool zusammengefasst werden sollen und sie einer Variablen abzulegen:

$disk = Get-PhysicalDisk -CanPool $True

Das ist praktisch und einfach, wenn Sie alle Disks, die an einem Pool teilnehmen, auch wirklich einbinden wollen. Aber hier ist Vorsicht geboten: So zeigte dieser Aufruf auf unseren Testsystemen immer auch das SSD-Gerät, auf dem unser Betriebssystem residierte, als „CanPool“ gleich „True“ an. Beim Anlegen eines neuen Speicherpools werden diese Platten jedoch komplett neu formatiert – was in diesem Fall sicher unangenehme Folgen gehabt hätte. Es ist also wichtig, genau zu überprüfen, welche Platten Teil des Speicherpools sein sollen und dann nur diese der entsprechenden Variablen zuzuweisen. Da die PowerShell das Arbeiten mit regulären Ausdrücken unterstützt, können Administratoren hier leicht entsprechende Abfragen entwerfen. Der Aufruf von „New-StoragePool“ kann dann folgendermaßen ausschauen:

# Festplatten an Variable zuweisen, deren Namen mit „S“ oder „T“ beginnen (Beispiel!)

$disk = Get-PhysicalDisk -FriendlyName [ST]*

#Der FriendlyName des StorageSubsystem wird mit Wildcard übergeben

New-StoragePool -FriendlyName “Test-Pool“ -StorageSubsystemFriendlyName “Windows Storage*“
-PhysicalDisks $disk

Danach zeigt das System an, dass ein neuer Storage-Pool angelegt wurde. Mittels der verschiedenen Parameter des Cmdlets New-StoragePool können Administratoren weitere Merkmale wie beispielsweise die Art der Spiegelung einstellen.

Der Administrator kann nun mit Hilfe eines Cmdlets wie New-VirtualDisk auf diesem Pool eine neue virtuelle Festplatte anlegen. Dazu kann zum Beispiel einen Aufruf der folgenden Form verwenden:

New-VirtualDisk -FriendlyName vDisk_test1 -StoragePoolFriendlyName “Test-Pool“ -Size 150 GB

Mit Hilfe dieser Kommandos ist dann leicht möglich, Skripte zu erstellen, mit denen Speicherplatz automatisch schnell angelegt und freigegeben werden kann.

Folgen Sie SearchStorage.de auch auf Twitter, Google+, Xing und Facebook!

Nächste Schritte

PowerShell 5.0: Die wichtigsten Cmdlets und Module.

Mit PowerShell-Scripting holen Sie mehr Leistung aus Microsoft Exchange.

PowerShell 5.0: Konfiguration von Netzwerk-Switches mit dem NetworkSwitch-Modul.

Wann ist ein PowerShell-Backup sinnvoll?

Erfahren Sie mehr über Storage Management