我离办公室很远,需要为电脑购买一个 SATA 硬盘。
我不能要求办公室里的任何人打开机箱,然后我想到了一个命令(例如 wmic 或 powershel)来获取这些 SATA 端口是否连接到某个东西(如果可能的话,获取连接了什么设备)。
我很难用谷歌搜索这个问题,但什么也没找到,你认为这可能吗?
谢谢!
答案1
由于问题标题要求使用命令行方法,因此这里是查找哪个硬盘连接到哪个主板端口的方法:
# query for wmi objects
$drivers = Get-CimInstance win32_pnpsignedDriver -filter 'DeviceName="Disk drive" OR DeviceName="CD-ROM Drive"'
$disks = Get-CimInstance Win32_PnPEntity | ? {$_.service -in 'disk','cdrom' -and $_.name -ne 'Xvd'} # Xvd is an xbox/windows-store-related device
# Iterate through disks
$result = foreach ($disk in $disks) {
# disk controllers are usually either IDE (IDE/SATA) or SCSI (NVME/M.2/virtual)
$controller = Get-CimInstance -query "ASSOCIATORS OF {Win32_PnPEntity.DeviceID='$($disk.DeviceID)'}" |
Where {$_.CreationClassName -in 'Win32_IDEController','Win32_SCSIController'}
# the driver class lists drive location
$driver = $drivers | where DeviceID -eq $disk.PNPDeviceID
# combine data for result
$disk | select Name,
@{l='location';e={$driver.Location}},
@{l='controllerName';e={$controller.Name}}
}
$result
输出如下:
Name location controllerName
---- -------- --------------
Samsung SSD 860 EVO 1TB Bus Number 0, Target Id 2, LUN 0 Intel(R) 300 Series Chipset Family SATA AHCI Controller
Samsung SSD 860 EVO 1TB Bus Number 0, Target Id 3, LUN 0 Intel(R) 300 Series Chipset Family SATA AHCI Controller
Samsung SSD 860 EVO 1TB Bus Number 0, Target Id 4, LUN 0 Intel(R) 300 Series Chipset Family SATA AHCI Controller
Samsung SSD 860 EVO 1TB Bus Number 0, Target Id 5, LUN 0 Intel(R) 300 Series Chipset Family SATA AHCI Controller
Samsung SSD 960 EVO 500GB Bus Number 0, Target Id 0, LUN 0 Standard NVM Express Controller
笔记:不要根据位置编号来推测有多少个端口。这款主板只有 4 个 SATA 端口,但我列出的 ID 从 开始2
。
没有简单的方法可以知道有多少端口未使用 - Windows 根本就不会跟踪它们。获取该信息的最佳方法可能是在线查找主板规格。
您通常可以通过 wmi 轻松谷歌搜索找到您的主板型号:
Get-CimInstance win32_baseboard | select Manufacturer,Product
Manufacturer Product
------------ -------
Gigabyte Technology Co., Ltd. B250N Phoenix WIFI-CF