如何用PowerShell检查硬盘驱动器是否是eide或sata

Nic*_*ssu 1 powershell wmi

我想知道是否有任何win32类可以检测硬盘驱动器是eide还是sata.提前致谢.

Ric*_*ard 9

如在另一个答案中所述,驱动器的标题(即模型名称)可能包含此信息,您可以导航WMI对象关联,直到您到达具有更明确的名称/标题/其他属性的设备.

devmgmt.msc与View 保持一致| 在开发过程中打开Connection的设备将使事情变得更容易.

导航WMI对象图的关键是"ASSOCIATORS OF"查询.

所以(使用大量的别名和其他快捷方式使这更容易:我会在我计划重用的东西中避免这种情况):

gwmi win32_DiskDrive |
  %{gwmi -query "ASSOCIATORS OF {$($_.__RELPATH)} where resultclass = Win32_PnpEntity"}
Run Code Online (Sandbox Code Playgroud)

将获取Win32_PnpEntity每个磁盘驱动器的对象.

在第一个(为了探索目的)将磁盘驱动器重复到另一个级别以查找存在哪种关联:

gwmi win32_DiskDrive |
  %{gwmi -query "ASSOCIATORS OF {$($_.__RELPATH)} where resultclass = Win32_PnpEntity" |
    %{gwmi -query "ASSOCIATORS OF {$($_.__RELPATH)}"}} | fl __CLASS,__RELPATH
Run Code Online (Sandbox Code Playgroud)

显示了WMI类的混合:

__CLASS   : Win32_SystemDriver
__RELPATH : Win32_SystemDriver.Name="disk"

__CLASS   : Win32_ComputerSystem
__RELPATH : Win32_ComputerSystem.Name="hostname"

__CLASS   : Win32_IDEController
__RELPATH : Win32_IDEController.DeviceID="PCIIDE\\IDECHANNEL\\4&5ECF4F&0&2"

__CLASS   : CIM_DataFile
__RELPATH : CIM_DataFile.Name="c:\\windows\\system32\\drivers\\disk.sys"

__CLASS   : Win32_DiskDrive
__RELPATH : Win32_DiskDrive.DeviceID="\\\\.\\PHYSICALDRIVE0"

最后一个是导航回磁盘驱动器,每个设备都与计算机系统相关联.但那个Win32_IDEController对象看起来很有趣.

它有一个ProtocolSupported具有不同总线值的属性,但这里的所有实例都是37("IDE"),并且控制器通道控制器都有实例:

PS[64bit] C:\bin\PowerShell> gwmi win32_idecontroller | ft -auto -wrap caption,description

caption                                  description
-------                                  -----------
ATA Channel 1                            IDE Channel
ATA Channel 0                            IDE Channel
ATA Channel 1                            IDE Channel
Standard AHCI 1.0 Serial ATA Controller  Standard AHCI 1.0 Serial ATA Controller
Standard AHCI 1.0 Serial ATA Controller  Standard AHCI 1.0 Serial ATA Controller
Standard Dual Channel PCI IDE Controller Standard Dual Channel PCI IDE Controller
ATA Channel 0                            IDE Channel
ATA Channel 1                            IDE Channel
ATA Channel 2                            IDE Channel
ATA Channel 3                            IDE Channel
ATA Channel 4                            IDE Channel
ATA Channel 5                            IDE Channel
ATA Channel 0                            IDE Channel

所以它不会像去一样容易Win32_IDEController.

返回并扩展Win32_IDEControllerWin32_PnpDevice我的磁盘相关联 :

gwmi win32_DiskDrive |
  %{gwmi -query "ASSOCIATORS OF {$($_.__RELPATH)} where resultclass = Win32_PnpEntity" |
    %{gwmi -query "ASSOCIATORS OF {$($_.__RELPATH)}  where resultclass = Win32_IDEController"}} |
  fl Caption,Description
Run Code Online (Sandbox Code Playgroud)
caption     : ATA Channel 2
description : IDE Channel

这是SATA通道,通道是否与控制器相关联?并简化:a的输出foreach-object不需要内部管道:

gwmi win32_DiskDrive |
  %{gwmi -query "ASSOCIATORS OF {$($_.__RELPATH)} where resultclass = Win32_PnpEntity"} |
  %{gwmi -query "ASSOCIATORS OF {$($_.__RELPATH)}  where resultclass = Win32_IDEController"} |
  %{gwmi -query "ASSOCIATORS OF {$($_.__RELPATH)}  where resultclass = Win32_IDEController"} |
  fl __CLASS,__RELPATH.Caption,Description
Run Code Online (Sandbox Code Playgroud)

这没什么,但是一点点探索(__RELPATH从一个查询中捕获以粘贴到另一个查询以保持管道受控)表明遵循关联:

DiskDrive --> PnpDevice --> IDEContoller --> PnpDevice --> IDEController

应该得到结果.避免循环(因为IDEController有两个相关的PnpDevice对象)留作练习.

到达真正的控制器后,需要解析标题.

坏消息

重复查询另一个系统上的控制器给出了三个实例,Standard Dual Channel PCI IDE Controller尽管有四个控制器(1×IDE和3×SATA),这可能与由于一个运行为RAID的非平凡映射有关?

当然,SATA具有与IDE基本相同的逻辑(编程)接口,以使新硬件与软件一起工作(同样适用于PCI和PCI-Express)意味着操作系统并不需要知道.

  • 嗨理查德.非常感谢您一直致力于我的详细解答.对此,我真的非常感激.我已经学到了关于wmi和powershell的新知识.再次感谢.:) (2认同)