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

PowerShell哈希表匹配报错:GetEnumerator处缺少'='运算符

问题分析与解决

错误原因

你遇到的“Missing '=' operator after key in hash literal”错误,本质是在哈希字面量(@{...})中错误地将方法调用($Departments.GetEnumerator())当作了哈希键。PowerShell的哈希表要求键必须是合法标识符、字符串(需引号包裹),不能直接把方法调用作为键,解析器会误认为你要定义键但未写=和对应值,从而抛出语法错误。

前置修正:确保哈希表正确导入

首先确认$Departments哈希表的导入方式正确——直接用Import-Csv得到的是对象数组,不是哈希表,需要手动转换为键值对结构(用OfficialDepartment作为键,DepartmentGlCode作为值):

# 初始化空哈希表
$Departments = @{}
# 从CSV导入并填充哈希表
Import-Csv "你的部门文件.csv" | ForEach-Object {
    $Departments[$_.OfficialDepartment] = $_.DepartmentGlCode
}

# 单独测试验证(此时搜索'ICT Dept'应该正常)
$Departments['ICT Dept']

正确在[PSCustomObject]中匹配AD用户部门

后续对接Get-ADUser时,无需调用GetEnumerator(),直接通过用户的Department字段作为键去哈希表中取值即可,正确写法如下:

Get-ADUser -Filter * -Properties Department | ForEach-Object {
    # 创建自定义对象时,在值的位置处理哈希表匹配逻辑
    [PSCustomObject]@{
        用户名 = $_.SamAccountName
        用户部门 = $_.Department
        部门GL码 = if ($Departments.ContainsKey($_.Department)) {
                        $Departments[$_.Department]
                    } else {
                        "无匹配GL码"
                    }
    }
}

如果需要遍历哈希表构建对象

若你原本想用GetEnumerator()遍历部门哈希表生成对象,正确写法是将遍历逻辑放在ForEach-Object中,而非哈希字面量内:

$Departments.GetEnumerator() | ForEach-Object {
    [PSCustomObject]@{
        正式部门名称 = $_.Key
        部门GL码 = $_.Value
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 23:32:11