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
相关产品推荐
相关产品推荐

