如何遍历注册表值数组并结合If语句匹配驱动描述与路径
优化PowerShell脚本以筛选含Ethernet的网卡驱动注册表信息
你的原始脚本存在两个问题:一是仅收集了驱动描述文本,未关联对应的注册表路径;二是代码重复冗余,维护性差。以下是优化后的实现,可同时获取符合条件的驱动描述及其注册表路径:
# 定义网卡类的基础注册表路径 $basePath = "HKLM:\SYSTEM\CurrentControlSet\Control\Class\{4d36e972-e325-11ce-bfc1-08002be10318}" # 遍历0000到0008的子项 $driverInfo = 0..8 | ForEach-Object { $subPath = Join-Path -Path $basePath -ChildPath ("{0:D4}" -f $_) try { # 获取驱动描述,同时保留注册表路径 $desc = Get-ItemPropertyValue -Path $subPath -Name "DriverDesc" -ErrorAction Stop [PSCustomObject]@{ RegistryPath = $subPath DriverDesc = $desc } } catch { # 忽略不存在的子项或无DriverDesc的情况 Write-Verbose "无法读取路径: $subPath" } } # 筛选出驱动描述包含"Ethernet"的条目 $ethernetDrivers = $driverInfo | Where-Object { $_.DriverDesc -like "*Ethernet*" } # 输出结果 $ethernetDrivers
关键说明:
- 用
0..8循环生成子项编号,结合Join-Path拼接完整路径,避免重复编写9次相同逻辑 - 通过
PSCustomObject将注册表路径和驱动描述绑定,确保两者关联不丢失 - 加入
try/catch块处理可能的路径不存在或权限问题,提升脚本健壮性 - 用
Where-Object精准筛选符合条件的条目,直接输出包含路径和描述的结果
内容的提问来源于stack exchange,提问作者chaosblade201
相关产品推荐
相关产品推荐

