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

PowerShell函数处理多用户时哈希表仅加载一次问题求助

问题根因&修复方案

核心问题点

  • 哈希表初始化位置错误:你将$Properties = @{}写在了Begin块中,整个函数运行期间只会初始化一次。第一个用户遍历完成后,Company、Department键已经存在于哈希表中,遍历第二个用户时再次调用Add方法添加同名键会直接触发异常,被catch块捕获后执行continue跳过后续逻辑,因此只输出了一次结果。
  • 报错信息变量拼写错误:catch块中你写的是$_.Exception.Messge,正确拼写为$_.Exception.Message,这导致你看不到重复键的报错提示,无法定位问题。
  • 潜在重复添加风险:如果有多个用户匹配DisplayName的特殊规则,重复添加FirstNamePreferred键也会触发相同的重复键异常。

修复方法

将哈希表初始化逻辑移动到foreach循环内部,每个用户处理时都生成全新的空哈希表即可,修正后代码如下:

Function Change-DRAUserProperty {
    Param (
        
        [Parameter(Mandatory=$true,
                   ValueFromPipeline=$true,
                   ValueFromPipelineByPropertyName=$true)]
        [string[]]$UserName,

        $Company,
        $Department,
        $DisplayName,
        $Name,
        $O, 
        $PhysicalDeliveryOfficeName,
        $TelephoneNumber,
        $Title
    )
    Begin 
    {
        $OrgBoxOu   = "*OU=XX, DC=XX"
        $Parameters = $PSBoundParameters
        # 移除原来的$Properties初始化,移到循环内
    }
    Process 
    {
        foreach ($User in $UserName) 
        {    
             try {
                $SelectedUser = $User
                $Properties = @{} # 每个用户单独初始化新哈希表
                if ($SelectedUser) {
                    $Parameters.GetEnumerator() | Where-Object Key -ne 'UserName' | 
                        ForEach-Object -Process `
                        {
                            if ($_.Key -eq 'DisplayName' -and $SelectedUser.DistinguishedName -notlike $OrgBoxOu) {
                                $Properties.Add('FirstNamePreferred', $_.Value) 
                            }
                            $Properties.Add($_.Key, $_.Value) 
                        }
                    
                    $Properties
                    #Set-DRAUser -Identifier $SelectedUser.DistinguishedName -Properties $Properties @DRA_Server_Splat -ErrorAction Stop
                }
                else {
                    Write-Host -Object "No valid member selected!"
                }
            
             }
             catch {
                # 修正报错变量拼写
                Write-Host -Object "$($_.Exception.Message)" -ForegroundColor Red -BackgroundColor Black
                continue
             }
            
        }

    }
    End { }
}

验证效果

再次执行Change-DRAUserProperty -UserName Abe, Abe2, Abe3 -Company SSC -Department USSF即可输出3组对应哈希表,符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 02:54:04