【问题标题】:how to check if hard drive is eide or sata with powershell如何使用powershell检查硬盘驱动器是eide还是sata
【发布时间】:2011-07-18 17:53:43
【问题描述】:

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

【问题讨论】:

    标签: powershell wmi


    【解决方案1】:

    other answer 中所述,驱动器的标题(即型号名称)可能包含此信息,您可以导航 WMI 对象关联,直到您找到具有更明确名称/标题/其他属性的设备。

    保持devmgmt.msc 在视图中打开 |开发时通过连接打开的设备将使事情变得更容易。

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

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

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

    将为每个磁盘驱动器获取Win32_PnpEntity 对象。

    在第一个(出于探索目的)磁盘驱动器上重复此操作到另一个级别以查找存在的关联类型:

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

    显示混合的 WMI 类:

    __CLASS : Win32_SystemDriver __RELPATH : Win32_SystemDriver.Name="磁盘" __CLASS : Win32_ComputerSystem __RELPATH : Win32_ComputerSystem.Name="主机名" __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 标题,描述 字幕说明 -------- ----------- ATA 通道 1 IDE 通道 ATA 通道 0 IDE 通道 ATA 通道 1 IDE 通道 标准 AHCI 1.0 串行 ATA 控制器 标准 AHCI 1.0 串行 ATA 控制器 标准 AHCI 1.0 串行 ATA 控制器 标准 AHCI 1.0 串行 ATA 控制器 标准双通道 PCI IDE 控制器 标准双通道 PCI IDE 控制器 ATA 通道 0 IDE 通道 ATA 通道 1 IDE 通道 ATA 通道 2 IDE 通道 ATA 通道 3 IDE 通道 ATA 通道 4 IDE 通道 ATA 通道 5 IDE 通道 ATA 通道 0 IDE 通道

    所以它不会像获得Win32_IDEController 那样容易。

    返回并为我的磁盘扩展与Win32_PnpDevice 关联的Win32_IDEController

    gwmi win32_DiskDrive |
      %{gwmi -query "ASSOCIATORS OF {$($_.__RELPATH)} where resultclass = Win32_PnpEntity" |
        %{gwmi -query "ASSOCIATORS OF {$($_.__RELPATH)}  where resultclass = Win32_IDEController"}} |
      fl Caption,Description
    
    标题:ATA 通道 2 描述:IDE通道

    那是 SATA 通道,该通道会与控制器关联吗?并简化: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
    

    这什么也没找到,但稍作探索(从一个查询中捕获 __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】:

    没有直接的方法可以找到它。但是,您可以使用 Win32_DiskDrive 的标题属性并对其进行解析以查看您是否有 ATA 或 SCSI 磁盘。在我的系统上,SATA 磁盘有一个标题ST9500420AS ATA Device

    你这样做的方式是:

    Get-WMIObject -Class Win32_DiskDrive | Select Caption, Index
    

    您可以解析 Caption 属性以查找它是否包含 ATA 或 SCSI。

    【讨论】:

    • 嗨拉维坎特。感谢您的回复。你总是很善良。我忘了说我已经检查过那节课了。不幸的是,按照你的建议,我的标题是 WDC WD5000BEVT-22A0RT0 而索引是 0。所以看来我不能总是依赖那个类。
    • 哦,好的。 AFAIK,那么没有简单的方法。 Windows 不提供查询磁盘类型的方法。如果可用,您可能必须使用制造商的 API。
    • 好的,谢谢。这就是为什么我什至在谷歌上搜索都没有找到任何东西的原因。再次感谢。你好。
    • NP。很高兴我的回答对您有所帮助。希望我也能帮助你。
    • my Caption = WDC WD10JPVX-22JC3T0 ATA 设备,现在如何确定是 SATA 还是 IDE,实际上是 SATA。
    【解决方案3】:

    我知道,这个问题有点老了,但是使用另一个 WMI-Object 怎么样:

    Get-WmiObject -Class MSFT_PhysicalDisk -Namespace root\Microsoft\Windows\Storage  | Select FriendlyName, MediaType, BusType
    

    BusType 2 代表 ATAPI,3 代表 ATA,11 代表 SATA。还有一些是 USB、SCSI 或 SSD。根据维基百科 (https://en.wikipedia.org/wiki/Parallel_ATA),ATA 和 ATAPI 都是硬盘的并行接口 (IDE / EIDE)。

    据我所知,该对象从 Windows 7 开始可用,并提供了许多有趣的值。

    【讨论】:

      【解决方案4】:

      @Richard 的回答很棒,但在这一点上有点过时了。

      他的代码可以在较新版本的 Powershell (v3+) 上得到显着简化。此外,在 Powershell v6+ 上,旧的 Get-WmiObject 命令根本不再可用。在这两种情况下,您都可以使用Get-CimInstance 命令和Get-CimAssociatedInstance 命令:

      Get-CimInstance -ClassName Win32_DiskDrive -KeyOnly |
        Get-CimAssociatedInstance -ResultClassName Win32_PnpEntity -KeyOnly |
        Get-CimAssociatedInstance -ResultClassName Win32_IDEController |
        Select-Object CreationClassName, DeviceID, Caption, Description |
        Format-List
      

      Get-CimInstance 的工作原理与Get-WmiObject 基本相同,尽管它在大多数情况下提高了输出。 Get-CimAssociatedInstance 完成了所有令人讨厌的 ASSOCIATORS OF 事情,您过去必须手动使用 gwmi。

      -KeyOnly 参数告诉管道中较早的命令返回它们返回的对象的唯一标识符。由于我们只希望管道中的早期命令能够识别硬件项目,因此无需让这些命令返回任何其他内容。

      也就是说,在具有Get-VolumeGet-PartitionGet-PhysicalDiskGet-Disk 的较新版本的 Powershell 上,上述内容可能是不必要的。如果您使用的是较新版本的 Windows,您可能只需要运行 Get-PhysicalDisk | Select-Object FriendlyName, BusType。通过这种方式,您通常可以获得更好(尽管不一定完美)的属性。

      您仍然可以使用 CIM 类,但请注意 CIM mapping between the different newer CIM storage classes is complicated,因为它可以表示相当复杂的安排,但是当您知道它们中的大多数可以通过 MSFT_StorageSubSystem 时,它会有所帮助。

      例如,这会为您提供与驱动器 C 关联的物理磁盘:

      Get-CimInstance -Namespace ROOT/Microsoft/Windows/Storage -ClassName MSFT_Volume -Filter "DriveLetter='C'" -KeyOnly | 
        Get-CimAssociatedInstance -ResultClassName MSFT_StorageSubSystem -KeyOnly |
        Get-CimAssociatedInstance -ResultClassName MSFT_PhysicalDisk |
        Select-Object -Property FriendlyName, SerialNumber, MediaType, BusType, Size, OperationalStatus, ObjectID -Unique
      

      注意命名空间ROOT/Microsoft/Windows/Storage必须在第一个命令中指定,因为新的存储类不在默认命名空间中。

      在这里,-Unique 参数以及在物理磁盘上包含 ObjectID 属性有助于确保该命令不会由于事物的映射方式而返回重复项。这是理查德的回答所讨论的“坏消息”的一部分。

      【讨论】:

        猜你喜欢
        • 2016-08-31
        • 2012-02-08
        • 2010-09-14
        • 2010-09-14
        • 1970-01-01
        • 2015-12-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多