使用命令行(powershell、wmic 等),我需要了解主板上有关内置 DVD 驱动器的所有信息,包括所连接的端口/插座。
是否可以?
我只发现了类似这样的内容:
Get-CimInstance -ClassName Win32_diskdrive
或者
wmic cdrom where mediatype!='unknown' get /format:list
但他们没有给我全部的信息(尤其是它所连接的插座)
谢谢!
答案1
我回答了这个问题这里但仅适用于“磁盘驱动器”类型的设备,因此我更新了过滤器以包含 CD ROM 设备,如下所示:
# 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
在我的虚拟机上,这将输出硬盘和 CD-ROM 设备的列表以及它们插入的位置:
Name location controllerName
---- -------- --------------
NECVMWar VMware SATA CD00 Bus Number 0, Target Id 0, LUN 0 Standard SATA ...
VMware Virtual disk SCSI Disk Device Bus Number 0, Target Id 0, LUN 0 LSI Adapter, S...
VMware Virtual disk SCSI Disk Device Bus Number 0, Target Id 1, LUN 0 LSI Adapter, S...
注意:不要根据位置编号来假设有多少个端口
没有简单的方法可以判断哪些/多少端口未使用 - Windows 不会跟踪它们。获取该信息的最佳方法可能是在线查找主板规格。