Von Holger Voges auf Montag, 03. Juni 2019
Kategorie: Tipp

Den Datenträgertyp (SSD,HDD) per Powershell und WMI/CIM bestimmen

Um in einem Skript zwischen HDDs und SSDs zu unterscheiden, kann man seit Windows 8 auf das Cmdlet Get-PhysicalDisk zurückgreifen. Es liefert ein MSFT_PhysicalDisk-Objekt zurück, das unter https://docs.microsoft.com/en-us/previous-versions/windows/desktop/stormgmt/msft-physicaldisk beschrieben ist. Die Eigenschaft MediaType enthält den Datenträgertyp (HDD,SSD).

Das Cmdlet Get-Physicaldisk ist als CDXML-basiertes Cmdlet implementiert und fragt im Prinzip einfach nur die Klasse MSFT_PhyscialDisk ab. Das kann man auch direkt erledigen. 

Get-CimInstance MSFT_Physicaldisk -Namespace root\Microsoft\Windows\Storage

Wichtig - Die Klasse MSFT_PhysicalDisk befindet sich nicht im Standard-Namespace CimV2, daher ist es wichtig, den Namespace mit anzugeben. 

Warum sollte man die Klasse direkt abfragen? Z.B. wenn einem die Storage-Cmdlets nicht zur Verfügung stehen, oder wenn man nicht sicher weiß, ob die Cmdlets verfügbar sind. Außerdem kann man mit Get-CimClass die Abfrage auch direkt einschränken, was schneller geht als über Get-PhysicalDisk und Where-Object zu filtern:

Get-CimInstance -Query "select * from MSFT_PhysicalDisk Where MediaType = 4" -Namespace root\Microsoft\Windows\Storage

Achten Sie darauf, dass der Mediatype in der Klasse mit einer Zahl (HDD3, SSD=4) repräsentiert ist!

Unter Windows 7 steht diese Klasse noch nicht zur Verfügung. Die einzige Möglichkeit, die Sie hier haben, ist über die Klasse Win32_DiskDrive zu gehen und zu hoffe, dass die Modellbezeichnung SSD beinhaltet: 

Get-WmiObject -Class Win32_diskdrive | Where-Object { $_.caption -match "ssd" }

Hier ist es prinzipiell natürlich auch möglich, Get-CIMClass zu benutzen, aber dafür muß unter Windows 7 auch Powershell 3 installiert sein. 

--- Update vom 14.11.2022 ---

Ein findiger Leser hat darauf hingewiesen, dass auch virtuelle Datenträger Mediatype 4 zurückliefern können. Um virtuelle Datenträger auszufiltern, kann man zusätzlich auf das Modell filtern:

Get-CimInstance -Query "select * from MSFT_PhysicalDisk Where MediaType = 4 and Model 'virtual Disk'" -Namespace root\Microsoft\Windows\Storage

Kommentare hinterlassen