如何通过循环将两个PowerShell查询合并为PSCustomObject统一表格?
合并PowerShell设备查询结果为统一表格
问题场景
需要将Get-CimInstance Win32_PnPEntity与Get-PnpDevice的查询结果合并,生成包含设备友好名称、数组类型HardwareID、InstanceID的统一表格,现有代码片段如下:
$deviceList = Get-CimInstance -ClassName Win32_PnPEntity | Select-Object Name, HardwareID $pnpDevLs = Get-PnpDevice | Select Object Name, InstanceID # Loop structure injected here: $obj = [PSCustomObject]@{ Name = $device.Name HardwareID = $device.HardwareID InstanceID = $pnpDev.InstanceID }
实现方案
直接按设备名称关联易出现重名匹配错误,建议通过Win32_PnPEntity的PNPDeviceID与Get-PnpDevice的InstanceID(二者为设备唯一标识,一一对应)进行精准关联,完整代码如下:
# 获取Win32_PnPEntity数据,保留PNPDeviceID用于关联 $deviceList = Get-CimInstance -ClassName Win32_PnPEntity | Select-Object Name, HardwareID, PNPDeviceID # 获取PnP设备数据 $pnpDevLs = Get-PnpDevice | Select-Object Name, InstanceID # 初始化结果集合 $combinedDevices = @() # 遍历设备并匹配关联 foreach ($device in $deviceList) { $matchedPnpDevice = $pnpDevLs | Where-Object { $_.InstanceID -eq $device.PNPDeviceID } if ($matchedPnpDevice) { $combinedDevices += [PSCustomObject]@{ Name = $device.Name HardwareID = $device.HardwareID # 保留原始数组类型 InstanceID = $matchedPnpDevice.InstanceID } } } # 输出合并后的表格 $combinedDevices | Format-Table -AutoSize
关键说明
- 用设备唯一标识关联,避免重名设备导致的匹配错误
- 保留
HardwareID的数组结构,不丢失原始数据 - 增加匹配判断,过滤无对应PnP记录的设备
内容的提问来源于stack exchange,提问作者Jose Serra
相关产品推荐
相关产品推荐

