如何匹配WMI获取的显卡名称与文本文件字符串并输出Quadro?
解决显卡型号与文件列表匹配的PowerShell脚本问题
原脚本的问题
- 变量名错误:定义的显卡变量是
$GCard,但判断时误用了$MyCard,直接导致匹配逻辑失效。 - 未处理文件中的引号:文件内容是引号包裹的型号列表,直接用整行匹配会包含引号,无法和显卡名称(如
NVIDIA Quadro K420)正常匹配。 - 未考虑多显卡场景:
Get-WmiObject可能返回多个显卡对象,需要遍历处理所有显卡。
修正后的可运行脚本
# 获取本机所有显卡名称,推荐用Get-CimInstance替代Get-WmiObject(更现代且兼容性更好) $gCards = (Get-CimInstance Win32_VideoController).Name # 读取文件内容,提取所有双引号内的显卡型号 $driverModels = Get-Content -Path "C:\temp\Quadro473.81.txt" | ForEach-Object { # 用正则匹配双引号内的内容,捕获组提取纯型号 if ($_ -match '"([^"]+)"') { $matches[1] } } # 遍历每个显卡,与提取的型号列表匹配 foreach ($card in $gCards) { # 支持精确匹配或模糊匹配,按需选择 if ($driverModels -contains $card -or $driverModels | Where-Object { $card -like "*$_*" }) { Write-Host "Quadro" # 匹配到后可直接退出循环(如果只需要一次匹配结果) break } }
关键细节说明
- 提取引号内容:通过正则表达式
"([^"]+)"匹配每行中的双引号区域,捕获组$matches[1]会返回去掉引号的纯型号文本。 - 多显卡兼容:将显卡名称存储为数组,遍历每个显卡进行匹配,避免遗漏多显卡场景。
- 匹配逻辑灵活:如果文件中的型号是完整名称(如
"NVIDIA Quadro K420"),用-contains精确匹配更准确;如果是简写型号(如"K420"),则用-like模糊匹配。
内容的提问来源于stack exchange,提问作者unitechie
相关产品推荐
相关产品推荐

