Private/Functions/Merge-AutoAttendantArtefact.ps1
# Module: TeamsFunctions # Function: Teams Auto Attendant # Author: David Eberhardt # Updated: 01-DEC-2020 # Status: Live function Merge-AutoAttendantArtefact { <# .SYNOPSIS Merges multiple Artefacts of an Auto Attendant into one Object for display .DESCRIPTION Helper function to prepare a nested Object of an Auto Attendant for display Used in Get-TeamsAutoAttendant .PARAMETER Object The input Object to transform .PARAMETER Type Type of Object (will determine Output) .PARAMETER Prompts Only valid for Type Call Flow and Menu - Object representing the Call Prompts .PARAMETER MenuOptions Only valid for Type Menu - Object representing the Menu Options .PARAMETER Menu Only valid for Type Call Flow - Object representing the Menu .INPUTS Deserialized.Microsoft.Rtc.Management.Hosted.OAA.Models.CallFlow Deserialized.Microsoft.Rtc.Management.Hosted.OAA.Models.Menu Deserialized.Microsoft.Rtc.Management.Hosted.OAA.Models.MenuOption Deserialized.Microsoft.Rtc.Management.Hosted.OAA.Models.CallHandlingAssociation Deserialized.Microsoft.Rtc.Management.Hosted.Online.Models.Schedule Deserialized.Microsoft.Rtc.Management.Hosted.OAA.Models.Prompt .OUTPUTS PSCustomObject .NOTES Schedule requires the queried Object from Get-CsOnlineSchedule All other parmeter work with the nested Object from the Auto Attendant Object .LINK https://github.com/DEberhardt/TeamsFunctions/tree/master/docs/ .LINK Get-TeamsAutoAttendant #> [CmdletBinding(DefaultParameterSetName = 'Prompt')] [OutputType([PSCustomObject])] param( [Parameter(Mandatory, HelpMessage = 'Deserialized Object for the AA')] [object[]]$Object, [Parameter(Mandatory, HelpMessage = 'Type of Object presented. Determines Output')] [ValidateSet('Prompt', 'MenuOption', 'Menu', 'CallFlow', 'Schedule', 'CallHandlingAssociation')] [string]$Type, [Parameter(Mandatory, ParameterSetName = 'Menu', HelpMessage = "Merged Object of 'Prompts' to be added to Call Flows or Menus")] [Parameter(Mandatory, ParameterSetName = 'CallFlow', HelpMessage = "Merged Object of 'Prompts' to be added to Call Flows or Menus")] [AllowNull()] [object[]]$Prompts, [Parameter(Mandatory, ParameterSetName = 'Menu', HelpMessage = "Merged Object of 'MenuOptions' to be added to Menus")] [object[]]$MenuOptions, [Parameter(Mandatory, ParameterSetName = 'CallFlow', HelpMessage = "Merged Object of 'Menu' to be added to Call Flows")] [object]$Menu, [Parameter(Mandatory, ParameterSetName = 'CallHandlingAssociation', HelpMessage = 'CallHandling Association only: Name of the Call Flow')] [object]$CallFlowName ) #param begin { #Show-FunctionStatus -Level Live #Write-Verbose -Message "[BEGIN ] $($MyInvocation.MyCommand)" $OFS = '' } #begin process { #Write-Verbose -Message "[PROCESS] $($MyInvocation.MyCommand)" $MergedObject = @() switch ($Type) { 'Prompt' { foreach ($O in $Object) { $SingleObject = @() $SingleObject = [PsCustomObject][ordered]@{ 'ActiveType' = $O.ActiveType 'TextToSpeechPrompt' = $O.TextToSpeechPrompt 'AudioFilePrompt' = $O.AudioFilePrompt # More boolean parameters are available with | FL *: # HasTextToSpeechPromptData, HasAudioFilePromptData, IsAudioFileAlreadyUploaded, IsDisabled, HasDualPromptData } 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 TeamsFunctions.AA.DisplayPrompt -PassThru } return $MergedObject } 'MenuOption' { foreach ($O in $Object) { # Enumerating Call Target if ($O.CallTarget.Id) { $CallTargetEntity = Get-TeamsCallableEntity $O.CallTarget.Id $CallTarget = @() $CallTarget = [PsCustomObject][ordered]@{ 'Entity' = $CallTargetEntity.Entity 'Identity' = $O.CallTarget.Id 'Type' = $O.CallTarget.Type } Add-Member -Force -InputObject $CallTarget -MemberType ScriptMethod -Name ToString -Value { #[System.Environment]::NewLine + (($this | Format-List * | Out-String) -replace '^\s+|\s+$') + [System.Environment]::NewLine } } else { $CallTarget = $null } # Creating Object $SingleObject = @() $SingleObject = [PsCustomObject][ordered]@{ 'DtmfResponse' = $O.DtmfResponse 'VoiceResponses' = $O.VoiceResponses 'Prompt' = $O.Prompt 'Action' = $O.Action 'CallTarget' = $CallTarget } Add-Member -Force -InputObject $SingleObject -MemberType ScriptMethod -Name ToString -Value { ([System.Environment]::NewLine + (($this | Format-List * | Out-String) -replace '^\s+|\s+$') + [System.Environment]::NewLine).replace(',', [System.Environment]::NewLine) } $MergedObject += Add-Member -InputObject $SingleObject -TypeName TeamsFunctions.AA.MenuOption -PassThru } return $MergedObject } 'Menu' { foreach ($O in $Object) { $SingleObject = @() $SingleObject = [PsCustomObject][ordered]@{ 'Name' = $O.Name 'Prompts' = $Prompts 'MenuOptions' = $MenuOptions 'DialByNameEnabled' = $O.DialByNameEnabled 'DirectorySearchMethod' = $O.DirectorySearchMethod } 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 TeamsFunctions.AA.Menu -PassThru } return $MergedObject } 'CallFlow' { foreach ($O in $Object) { $SingleObject = @() $SingleObject = [PsCustomObject][ordered]@{ 'Name' = $O.Name 'Id' = $O.Id 'Greetings' = $Prompts 'Menu' = $Menu } 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 TeamsFunctions.AA.CallFlow -PassThru } return $MergedObject } 'Schedule' { foreach ($O in $Object) { switch ($O.Type) { 0 { # Schedule Type is WeeklyRecurrence $FixedSchedule = $null $WeeklyRecurrentSchedule = @() $WeeklyRecurrentSchedule = [PsCustomObject][ordered]@{ 'ComplementEnabled' = $O.WeeklyRecurrentSchedule.ComplementEnabled 'MondayHours' = $O.WeeklyRecurrentSchedule.DisplayMondayHours 'TuesdayHours' = $O.WeeklyRecurrentSchedule.DisplayTuesdayHours 'WednesdayHours' = $O.WeeklyRecurrentSchedule.DisplayWednesdayHours 'ThursdayHours' = $O.WeeklyRecurrentSchedule.DisplayThursdayHours 'FridayHours' = $O.WeeklyRecurrentSchedule.DisplayFridayHours 'SaturdayHours' = $O.WeeklyRecurrentSchedule.DisplaySaturdayHours 'SundayHours' = $O.WeeklyRecurrentSchedule.DisplaySundayHours } Add-Member -Force -InputObject $WeeklyRecurrentSchedule -MemberType ScriptMethod -Name ToString -Value { [System.Environment]::NewLine + (($this | Format-List * | Out-String) -replace '^\s+|\s+$') + [System.Environment]::NewLine } } 1 { # Schedule Type is Fixed $WeeklyRecurrentSchedule = $null $FixedSchedule = $Schedule.FixedSchedule.DisplayDateTimeRanges } } $SingleObject = @() $SingleObject = [PsCustomObject][ordered]@{ 'Name' = $O.Name 'Type' = $O.Type 'WeeklyRecurrentSchedule' = $WeeklyRecurrentSchedule 'FixedSchedule' = $FixedSchedule 'Id' = $O.Id } 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 TeamsFunctions.AA.Schedule -PassThru } return $MergedObject } 'CallHandlingAssociation' { foreach ($O in $Object) { $SingleObject = @() $SingleObject = [PsCustomObject][ordered]@{ 'Type' = $O.Type 'Enabled' = $O.Enabled 'Schedule' = $(Get-CsOnlineSchedule -Id $O.ScheduleId).Name 'CallFlow' = $CallFlowName } 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 TeamsFunctions.AA.CallHandlingAssociation -PassThru } return $MergedObject } } } #process end { #Write-Verbose -Message "[END ] $($MyInvocation.MyCommand)" } #end } # Merge-AutoAttendantArtefact |