函数只显示一次属性

Function only diplays properties once

我有一个功能,出于某种原因,似乎只显示 $Properties 一次,无论有多少用户传递给脚本。试图仅将 $user 传递到脚本中以进行显示,但是,它也只显示一次。不太确定它为什么这样做,因为我已经用尽了它可能是什么的想法:

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

        $Company,
        $Department,
        $Name,
        $O, 
        $PhysicalDeliveryOfficeName,
        $TelephoneNumber,
        $Title
    )
    DynamicParam
    {
        if ($UserName.Split(',').Count -le 1) {
            $displayNameAttribute = New-Object System.Management.Automation.ParameterAttribute
            $displayNameAttribute.Mandatory = $false
            $attributeCollection = new-object System.Collections.ObjectModel.Collection[System.Attribute]
            $attributeCollection.Add($displayNameAttribute)
            $displayNameParam = New-Object System.Management.Automation.RuntimeDefinedParameter('DisplayName', [string], $attributeCollection)
            $paramDictionary = New-Object System.Management.Automation.RuntimeDefinedParameterDictionary
            $paramDictionary.Add('DisplayName', $displayNameParam)
            $paramDictionary
       }
    }
    Begin 
    {
        $OrgBoxOu   = "*OU=xxxxxxxxx"
        $Parameters = $PSBoundParameters
        $Properties = @{}
    }
    Process 
    {
        foreach ($User in $UserName) 
        {   
            try {
                $SelectedUser = Get-ADUser -Identity $User -Properties DisplayName
                    if ($SelectedUser) {
                        $Parameters.GetEnumerator() | Where-Object -FilterScript {$_.Key -ne 'UserName'} | 
                            ForEach-Object -Process `
                            {
                                if ($_.Key -eq 'DisplayName' -and $SelectedUser.DistinguishedName -like $OrgBoxOu) {
                                    if ('FirstNamePreferred' -in $Properties.Keys) {
                                        Continue
                                    }
                                    else {
                                        $Properties.Add($_.Key, $_.Value)
                                        $Properties.Add('FirstNamePreferred', $_.Value) 
                                    }
                                }
                                else {
                                    if ($_.Key -in $Properties.Keys) { 
                                        Continue
                                    }
                                    else {
                                        $Properties.Add($_.Key, $_.Value) 
                                    }
                                }
                            }

                        $Properties.GetEnumerator()
                        #Set-DRAUser -Identifier $SelectedUser.DistinguishedName -Properties $Properties @DRA_Server_Splat -ErrorAction Stop
                    }

                    else {
                        Write-Host -Object "No valid member selected!"
                    }
            }
            catch {
                Write-Host -Object "ERROR: $($_.Exception.Message)" -ForegroundColor Red -BackgroundColor Black
                continue
            }

        }

    }
    End { }
}

当运行函数时,

。 . .输出只显示一次:

Name                           Value                                                                                                                                                                                                                             
----                           -----                                                                                                                                                                                                                             
Company                        ssc  

我想要实现的是将值分配到另一个 cmdlet 上,但只要我的 $Properties 哈希表只显示一次,它就不会工作。所以预期的输出将是它显示已传递给函数的每个用户的哈希表:

Name                           Value                                                                                                                                                                                                                             
----                           -----                                                                                                                                                                                                                             
Company                        ssc  

Name                           Value                                                                                                                                                                                                                             
----                           -----                                                                                                                                                                                                                             
Company                        ssc  

只是在寻找一些可以为我指明正确方向的新视角 and/or,阐明可能发生的事情(错误)。 不确定是什么导致了问题,因此无法将其精确指向特定的代码部分

请多多指教:)

解决方案是在 foreach 循环内而不是在 begin { ... } 块内定义 hashtable

foreach ($User in $UserName) 
{
    $Properties = @{}
    ....
    ....
}

但是如果你想了解为什么它以前不起作用?,这是你的提示:

if ($_.Key -in $Properties.Keys) { 
    '{0} is in $Properties.Keys :)' -f $_.Key
    Continue
}

产生:

Name                           Value
----                           -----
Company                        ssc
Company is in $Properties.Keys :)
Company is in $Properties.Keys :)

这只是因为 $Properties 在每次迭代中都相同(因为它是在 begin { ... } 块中定义的)。