You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过循环将两个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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 06:03:24