Change forwarding address using csv file

Function set-ForwardAddresses
{
<#
.Synopsis
Changes Forward addresses of mailboxes using detailed from .csv file
.Description
The cmdlet uses set-mailbox -ForwardingAdrress to process to modify multiple accounts at once.

#>
[CmdletBinding()]
Param(
#csv File path and name details
[parameter(Mandatory=$true,
Helpmessage=“Enter the path of the .csv that holds the USerID and ForwardAddress Information”)]
[Alias(‘InputFile’,‘FilePath’)]
$FromFile
)

# Change SMTP addresses of users to new SMTP addresses defined in inputted csv file and delete the old smpt address 
begin
{
    $users = Import-CSV -path $fromFile -Header("USERID","ForwardAddress")
    ide

}
Process
{
    $users | foreach-object {
    $ID += $_.UserID 
    $ForwardAddress += $_.ForwardAddress

	set-mailbox -identity $ID -ForwardingAddress $ForwardAddress -DeliverToMailboxAndForward $false 
    write-host User $ID had forwarding address $ForwardAddress added to their mailbox
	}#close for-lopo
}
End
{
Write-Output = 'The process is finished'
}

}#close function

I have created a function and added it to my module, imported it.

[PS] C:\scripts>set-ForwardAddresses -FromFile ‘C:\Users\AWAdmin\Documents\WindowsPowerShell\email mailboxes\EmailForwards.csv’

add-pssnapin : Cannot add Windows PowerShell snap-in Microsoft.Exchange.Management.PowerShell.E2010 because it is alrea
dy added. Verify the name of the snap-in and try again.
At C:\users\awadmin\Documents\WindowsPowerShell\Modules\CustomAWEmailFunctions\CustomAWEmailFunctions.psm1:23 char:21

  •     add-pssnapin &lt;&lt;&lt;&lt;  Microsoft.Exchange.Management.PowerShell.E2010
    
    • CategoryInfo : InvalidArgument: (Microsoft.Excha…owerShell.E2010:String) [Add-PSSnapin], PSArgumentEx
      ception
    • FullyQualifiedErrorId : AddPSSnapInRead,Microsoft.PowerShell.Commands.AddPSSnapinCommand

Cannot process argument transformation on parameter ‘Identity’. Cannot convert the “System.Collections.ArrayList” value
of type “System.Collections.ArrayList” to type “Microsoft.Exchange.Configuration.Tasks.MailboxIdParameter”.
+ CategoryInfo : InvalidData: (:slight_smile: [Set-Mailbox], ParameterBindin…mationException
+ FullyQualifiedErrorId : ParameterArgumentTransformationError,Set-Mailbox
+ PSComputerName : hww-cas01.hogarthww.prv

Is there any way I can fix this please?

Thanks

Alex

Function set-ForwardAddresses
{
<#
.Synopsis
Changes Forward addresses of mailboxes using detailed from .csv file
.Description
The cmdlet uses set-mailbox -ForwardingAdrress to process to modify multiple accounts at once.

#>
[CmdletBinding()]
Param(
#csv File path and name details
[parameter(Mandatory=$true,
Helpmessage=“Enter the path of the .csv that holds the USerID and ForwardAddress Information”)]
[Alias(‘InputFile’,‘FilePath’)]
$FromFile
)

# Change SMTP addresses of users to new SMTP addresses defined in inputted csv file and delete the old smpt address 
begin
{
    $users = Import-CSV -path $FromFile -Header("USERID","ForwardAddress")
   

}
Process
{
    $users | foreach-object {
    

	set-mailbox -identity $_.UserID -ForwardingAddress $_.ForwardAddress -DeliverToMailboxAndForward $false 
    write-host User $_.UserID had forwarding address $_.ForwardAddress added to their mailbox
	}#close for-lopo
}
End
{
Write-Output = 'The process is finished'
}

}#close function

This worked using $_. in the cmdlet directly instead of via a variable