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

能否用变量存储输入值并调用PowerShell哈希表对应值?

PowerShell哈希表取值失败问题解决

问题根源

你的代码核心问题是哈希表键的类型不匹配:

  • 哈希表$AppGroupsHash的键是整数类型(1、2、3、4)
  • 通过Read-Host获取的输入是字符串,分割后$AppGroupsKey也是字符串类型
  • 用-ccontains比较时,字符串"1"和整数1属于不同类型,条件不成立,导致取值代码$AppGroupsHash.($AppGroupsKey)根本没执行

修复方案

有两种简单的解决思路,选一种即可:

方案1:将输入的字符串键转换为整数

在循环中把用户输入的字符串转换为整数,同时添加输入合法性校验,避免无效输入报错:

# 定义哈希表(键为整数)
$AppGroupsHash = @{
    1 = "AppADGroup1" 
    2 = "AppADGroup2" 
    3 = "AppADGroup3" 
    4 = "AppADGroup4" 
}

# 修正显示选项的错误(之前重复写了AppADGroup1)
Write-Host "`n1 = AppADGroup1`n2 = AppADGroup2`n3 = AppADGroup3`n4 = AppADGroup4`n  " -ForegroundColor Yellow

# 获取用户输入
$AppGroupsKeys = Read-Host "Enter App Hash values (1 - 2 - 3 - 4) (No space, delimit with ';') "

foreach ($keyStr in $AppGroupsKeys.Split(';')) 
{
    # 安全转换字符串为整数,避免无效输入报错
    if ([int]::TryParse($keyStr.Trim(), [ref]$keyInt)) {
        if ($AppGroupsHash.ContainsKey($keyInt)) 
        {
            Write-Host "选中键: $keyInt"
            # 正确取值并输出
            $targetGroup = $AppGroupsHash[$keyInt]
            Write-Host "对应AD组: $targetGroup"
            
            # 这里添加将用户加入AD组的逻辑,示例:
            # Add-ADGroupMember -Identity $targetGroup -Members "TargetUserName"
        }
        else {
            Write-Host "错误:键 $keyInt 不存在" -ForegroundColor Red
        }
    }
    else {
        Write-Host "错误:输入的 '$keyStr' 不是有效数字" -ForegroundColor Red
    }
}

方案2:将哈希表的键改为字符串类型

直接把哈希表的键定义为字符串,这样输入的字符串可以直接匹配,无需类型转换:

# 哈希表键改为字符串类型
$AppGroupsHash = @{
    "1" = "AppADGroup1" 
    "2" = "AppADGroup2" 
    "3" = "AppADGroup3" 
    "4" = "AppADGroup4" 
}

Write-Host "`n1 = AppADGroup1`n2 = AppADGroup2`n3 = AppADGroup3`n4 = AppADGroup4`n  " -ForegroundColor Yellow

$AppGroupsKeys = Read-Host "Enter App Hash values (1 - 2 - 3 - 4) (No space, delimit with ';') "

foreach ($key in $AppGroupsKeys.Split(';')) 
{
    $cleanKey = $key.Trim()
    if ($AppGroupsHash.ContainsKey($cleanKey)) 
    {
        Write-Host "选中键: $cleanKey"
        Write-Host "对应AD组: $($AppGroupsHash[$cleanKey])"
        # Add-ADGroupMember -Identity $($AppGroupsHash[$cleanKey]) -Members "TargetUserName"
    }
    else {
        Write-Host "错误:键 '$cleanKey' 不存在" -ForegroundColor Red
    }
}

补充说明

你之前尝试的write-host "$AppGroupsHash.$AppGroupsKey;"返回System.Collections.Hashtable.1;,是因为直接拼接哈希表对象时,PowerShell会输出它的类型名称。正确的取值方式是$AppGroupsHash[$key]或$AppGroupsHash.($key),前提是键的类型必须匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 19:15:44