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

