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

PowerShell中向ListView添加嵌套哈希表键值对问题求助

解决哈希表数据展示到WinForms ListView的问题

原代码的问题

你的代码有几个关键错误导致无法正常工作:

  • 遍历哈希表时未正确获取单个键值对,直接遍历$hash拿到的是整个集合而非条目
  • $data.Text = $hash错误地将整个哈希表赋值给列表项文本,应该用当前条目的键名
  • 获取版本值时错误地从全局哈希表$hash取值,而非当前条目对应的嵌套哈希表
  • 多余的Select-Object语句未赋值给变量,完全不起作用

修正后的代码

首先确保你的ListView已添加对应列(比如三列:"组件名称"、"当前版本"、"远程版本"),再使用以下代码:

$listview1.Items.Clear()
Write-Host "Items cleared..."
# 假设Get-LocalRemoteHash会将哈希表赋值给$hash变量
$hash = Get-LocalRemoteHash
Write-Host "Get-LocalRemoteHash ran."

# 遍历哈希表的每个键值对条目
foreach ($entry in $hash.GetEnumerator()) {
    # 创建ListView项,第一列显示组件名称(哈希表的键)
    $listItem = [System.Windows.Forms.ListViewItem]::new($entry.Key)
    # 从嵌套哈希表中取出对应版本值,添加为子项
    $listItem.SubItems.Add($entry.Value.currentVersion)
    $listItem.SubItems.Add($entry.Value.remoteVersion)
    # 添加到ListView
    $listview1.Items.Add($listItem)
    Write-Host "已添加条目: $($entry.Key)"
}
Write-Host "End"

关键说明

  • 使用$hash.GetEnumerator()遍历哈希表的每个键值对条目,能拿到组件名称($entry.Key)和对应的版本数据($entry.Value,即包含currentVersion和remoteVersion的嵌套哈希表)
  • 初始化ListViewItem时直接传入第一列文本,写法更简洁
  • 从$entry.Value中获取版本值,确保对应到当前组件的正确数据

内容的提问来源于stack exchange,提问作者Jacob North

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 10:11:07