Как проверить, является ли жесткий диск EIDE или SATA с PowerShell - PullRequest
1 голос
/ 19 марта 2011

Мне хотелось бы знать, есть ли какой-нибудь класс win32, который может определить, является ли жесткий диск eide или sata.Заранее спасибо.

Ответы [ 2 ]

9 голосов
/ 19 марта 2011

Как отмечено в другом ответе заголовок диска (т. Е. Название модели) может включать эту информацию, вы можете перемещаться по ассоциациям объектов WMI, пока не доберетесь до устройства с более определенным именем / заголовком / другимсвойство.

Сохранение devmgmt.msc открыть с помощью View |Устройства с помощью подключения, открытого во время разработки, упростят задачу.

Ключ к навигации по графу объектов 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="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_IDEController, связанное с Win32_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
caption     : ATA Channel 2
description : IDE Channel

Так что это канал 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), что означает, что ОС не 'это действительно нужно знать.

2 голосов
/ 19 марта 2011

Нет прямого способа найти это. Однако вы можете использовать свойство caption Win32_DiskDrive и проанализировать его, чтобы увидеть, есть ли у вас диск ATA или SCSI. На моей системе диск SATA имеет заголовок ST9500420AS ATA Device.

Как вы это делаете:

Get-WMIObject -Class Win32_DiskDrive | Select Caption, Index

Можно проанализировать свойство Caption, чтобы определить, содержит ли оно ATA или SCSI.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...