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

PowerShell中如何遍历多维哈希表并访问所有键?

解决PowerShell多维哈希表遍历所有键的问题

嘿,我来帮你搞定这个嵌套哈希表遍历的问题!先拆解下你的哈希表结构,它是多层嵌套的:

$ou = @{
    class = @{
        value1 = @{ 1 = "" }
        value2 = ""
        value3 = ""
    }
}

顶层哈希表有一个键class,对应的值又是一个哈希表,里面包含你要找的value1、value2、value3,甚至value1还嵌套了更深的哈希表。

先搞定固定两层嵌套的情况

你之前的问题出在没有正确获取嵌套的哈希表对象。你写的$key.keys里的$key其实是顶层的键字符串(比如class),不是哈希表对象,自然没法拿到内层的键。正确的两层遍历写法如下:

# 遍历顶层哈希表的键
foreach ($topKey in $ou.Keys) {
    # 拿到顶层键对应的嵌套哈希表
    $innerHash = $ou[$topKey]
    # 遍历内层哈希表的所有键
    foreach ($innerKey in $innerHash.Keys) {
        Write-Host "内层键: $innerKey"
    }
}

运行这段代码就能输出你要的value1、value2、value3了。

通用递归遍历(支持任意多层嵌套)

如果你的哈希表可能有更深的嵌套(比如value1里的1这个键),手动加多层循环显然不灵活,这时候用递归函数就完美解决:

function Get-AllHashKeys {
    param(
        [Parameter(Mandatory=$true)]
        [hashtable]$Hash
    )

    foreach ($key in $Hash.Keys) {
        # 输出当前找到的键
        Write-Host "找到键: $key"
        # 检查当前键对应的值是否还是哈希表,如果是,递归遍历下一层
        if ($Hash[$key] -is [hashtable]) {
            Get-AllHashKeys -Hash $Hash[$key]
        }
    }
}

# 调用函数遍历你的哈希表
Get-AllHashKeys -Hash $ou

这段代码会遍历所有层级的键,输出结果是:

找到键: class
找到键: value1
找到键: 1
找到键: value2
找到键: value3

关于你之前的疑惑

你提到$key.keys返回奇怪的内容,是因为$key是字符串类型(比如顶层的class),字符串本身并没有Keys属性。PowerShell的成员访问会做一些隐式处理,导致返回了不符合预期的内容。你需要先通过$ou[$key]获取到对应的哈希表对象,再访问它的Keys属性才行。

内容的提问来源于stack exchange,提问作者Louis J.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:38:53