Netz-Weise Logo

Weisheiten - der Netz-Weise Blog

Hier finden Sie Tipps und Tricks für vor, während und nach der Schulung.
1 Minuten Lesezeit (277 Worte)

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

Mit Powershell prüfen, ob eine Objekteigenschaft v...
Fehlende virtuelle Switche für Hyper-V VMs ermitte...
 

Kommentare 2

Gäste - GoaMetz am Montag, 14. November 2022 21:38

Heho,

... dummerweise haben virtuelle Laufwerke auch Mediatype 4 obwohl sie keine SSDs sind, was eine Weiterverarbeitung dieser Abfrage für z.B. "Optimize-Volume -DriveLetter $SSD -ReTrim" verunmöglicht.

Heho, ... dummerweise haben virtuelle Laufwerke auch Mediatype 4 obwohl sie keine SSDs sind, was eine Weiterverarbeitung dieser Abfrage für z.B. "Optimize-Volume -DriveLetter $SSD -ReTrim" verunmöglicht.
Holger Voges am Montag, 14. November 2022 22:54

In der Tat hast Du Recht. Das Problem lässt sich mit einer einfachen Erweiterung der Abfrage aber lösen, da virtuelle Datenträger über die Eigenschaft Model identifizierbar sind. Die Abfrage lautet dann:

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

In der Tat hast Du Recht. Das Problem lässt sich mit einer einfachen Erweiterung der Abfrage aber lösen, da virtuelle Datenträger über die Eigenschaft Model identifizierbar sind. Die Abfrage lautet dann: [i]Get-CimInstance -Query "select * from MSFT_PhysicalDisk Where MediaType = 4 and Model 'virtual Disk'" -Namespace root\Microsoft\Windows\Storage[/i]
Bereits registriert? Hier einloggen
Montag, 20. Mai 2024

Sicherheitscode (Captcha)