求助:修复PowerShell查询NVMe驱动版本的兼容问题
解决PowerShell单NVMe设备时驱动版本获取不全的问题
问题根源在于:当只有一个匹配的AWS NVMe设备时,Get-WmiObject返回的是单个对象而非数组,此时$NVME.driverversion是字符串类型,你用[0]会取字符串的第一个字符(也就是版本号的首字符“1”);而多个设备时返回的是对象数组,$NVME.driverversion会自动转为字符串数组,[0]能正确取到第一个设备的完整版本。
修改后的代码方案
方案1:强制转为数组(兼容单/多设备场景)
# 用@()强制将结果转为数组,确保单对象时也按数组逻辑处理 $NVME = @(Get-WmiObject win32_PNPSignedDriver | Where-Object { $_.devicename -like "*AWS NVMe" } | Select-Object devicename, driverversion) # 获取所有匹配设备的驱动版本(单设备时是单个字符串,多设备时是字符串数组) $NVMEVersion = $NVME.driverversion # 如果只需要第一个设备的版本,依然可以用[0],此时单设备时也能取完整版本 # $NVMEVersion = $NVME.driverversion[0]
方案2:直接展开驱动版本属性(更简洁)
如果只需要驱动版本,不需要设备名称,可以直接用Select-Object -ExpandProperty提取版本:
$NVMEVersion = Get-WmiObject win32_PNPSignedDriver | Where-Object { $_.devicename -like "*AWS NVMe" } | Select-Object -ExpandProperty driverversion
方案3:遍历输出每个设备的信息(更直观)
如果需要同时查看设备名称和对应版本,可以遍历处理:
$NVME = @(Get-WmiObject win32_PNPSignedDriver | Where-Object { $_.devicename -like "*AWS NVMe" } | Select-Object devicename, driverversion) foreach ($device in $NVME) { Write-Host "设备名称: $($device.devicename)`n驱动版本: $($device.driverversion)`n" }
内容的提问来源于stack exchange,提问作者prof x
相关产品推荐
相关产品推荐

