Weisheiten - der Netz-Weise Blog
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 2
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.
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