Private/Merge-VoiceRoutingChainArtefact.ps1
# Module: TeamsFunctions # Function: Teams Auto Attendant # Author: David Eberhardt # Updated: 01-DEC-2020 # Status: Live function Merge-VoiceRoutingChainArtefact { <# .SYNOPSIS Merges multiple Artefacts of an Online Voice Routing Policy into one Object for display .DESCRIPTION Helper function to prepare a nested Object of an Online Voice Routing Policy for display Used in Get-TeamsVoiceRoutingChain .PARAMETER Object The input Object to transform .PARAMETER Type Type of Object (will determine Output) .PARAMETER OVRs Only valid for Type OPU .PARAMETER MGWs Only valid for Type OVR .INPUTS PSCustomObject .OUTPUTS PSCustomObject .NOTES All parmeter work with the nested Objects from the Parsed Object .LINK https://github.com/DEberhardt/TeamsFunctions/tree/main/docs/ .LINK Get-TeamsVoiceRoutingChain #> [CmdletBinding(DefaultParameterSetName = 'Prompt' )] [OutputType([PSCustomObject])] param( #TEST Whether both Object and Identity work - replicate for Set-TeamsCAP [Parameter(Mandatory, HelpMessage = 'Object for Voice Routing Chain')] [object[]]$Object, [Parameter(Mandatory, HelpMessage = 'Type of Object presented. Determines Output')] [ValidateSet('OPU', 'OVR', 'MGW')] [string]$Type, [Parameter(HelpMessage = "Merged Object of 'MGWs' to be added to OVRs")] [Parameter(Mandatory, ParameterSetName = 'OPUs', HelpMessage = "Merged Object of 'MGWs' to be added to OPUs")] [AllowNull()] [object[]]$OVRs, [Parameter(HelpMessage = "Merged Object of 'MGWs' to be added to OVRs")] [Parameter(Mandatory, ParameterSetName = 'OVRs', HelpMessage = "Merged Object of 'MGWs' to be added to OVRs")] [AllowNull()] [object[]]$MGWs ) #param begin { #Show-FunctionStatus -Level Live #Write-Verbose -Message "[BEGIN ] $($MyInvocation.MyCommand)" $OFS = '' } #begin process { #Write-Verbose -Message "[PROCESS] $($MyInvocation.MyCommand)" Write-Verbose -Message "[PROCESS] $($MyInvocation.MyCommand) - Processing Voice Routing Chain Artefact of Type '$Type'" $MergedObject = @() switch ($Type) { 'OPU' { foreach ($O in $Object) { $SingleObject = @() $SingleObject = [PsCustomObject][ordered]@{ PSTypeName = 'PowerShell.TeamsFunctsions.VoiceRoutingChain.PstnUsage' 'Name' = $O 'OnlineVoiceRoute' = $OVRs } Add-Member -Force -InputObject $SingleObject -MemberType ScriptMethod -Name ToString -Value { [System.Environment]::NewLine + (($this | Format-List * | Out-String) -replace '^\s+|\s+$') + [System.Environment]::NewLine } $MergedObject += Add-Member -InputObject $SingleObject -TypeName System.Collections.ArrayList -PassThru } return $MergedObject } 'OVR' { foreach ($O in $Object) { $SingleObject = @() $SingleObject = [PsCustomObject][ordered]@{ PSTypeName = 'PowerShell.TeamsFunctsions.VoiceRoutingChain.VoiceRoute' 'Name' = $O.Identity 'Description' = $O.Description 'Priority' = $O.Priority 'NumberPattern' = $O.NumberPattern 'OnlinePstnGatewayList' = $MGWs } Add-Member -Force -InputObject $SingleObject -MemberType ScriptMethod -Name ToString -Value { [System.Environment]::NewLine + (($this | Format-List * | Out-String) -replace '^\s+|\s+$') + [System.Environment]::NewLine } $MergedObject += Add-Member -InputObject $SingleObject -TypeName System.Collections.ArrayList -PassThru } return $MergedObject } 'MGW' { foreach ($O in $Object) { $SingleObject = @() $SingleObject = [PsCustomObject][ordered]@{ PSTypeName = 'PowerShell.TeamsFunctsions.VoiceRoutingChain.MediaGateway' 'Identity' = $O.Identity 'SipSignalingPort' = $O.SipSignalingPort 'FailoverTimeSeconds' = $O.FailoverTimeSeconds 'Enabled' = $O.Enabled 'MediaBypass' = $O.MediaBypass 'PidfLoSupported' = $O.PidfLoSupported 'GatewaySiteId' = $GatewaySiteId 'GatewaySiteLbrEnabled' = $GatewaySiteLbrEnabled #TranslationRules are also hooked in here but hardly configured. # they too could be added as a separate Object here and hooked into the MGW } Add-Member -Force -InputObject $SingleObject -MemberType ScriptMethod -Name ToString -Value { [System.Environment]::NewLine + (($this | Format-List * | Out-String) -replace '^\s+|\s+$') + [System.Environment]::NewLine } $MergedObject += Add-Member -InputObject $SingleObject -TypeName System.Collections.ArrayList -PassThru } return $MergedObject } } } #process end { #Write-Verbose -Message "[END ] $($MyInvocation.MyCommand)" } #end } # Merge-VoiceRoutingChainArtefact |