Public/Copy-TerminalSlide.ps1

function Copy-TerminalSlide {
    [CmdletBinding()]
    [OutputType([object])]
    param(
        [Parameter(Mandatory, ValueFromPipeline)][TerminalSlides.Schema.V1.TerminalPresentation]$Presentation,
        [Parameter(Mandatory)][int]$Index,
        [int]$DestinationIndex = -1
    )
    process {
        if ($Index -lt 1 -or $Index -gt $Presentation.Slides.Count) { throw 'Slide index out of range.' }
        $clone = Copy-TerminalSlideModel -Slide $Presentation.Slides[$Index - 1]
        $clone.Id = [guid]::NewGuid().ToString()
        foreach ($element in $clone.Elements) {
            $element.Id = [guid]::NewGuid().ToString()
        }
        if ($DestinationIndex -lt 1 -or $DestinationIndex -gt $Presentation.Slides.Count + 1) {
            $Presentation.Slides.Add($clone)
        }
        else {
            $Presentation.Slides.Insert($DestinationIndex - 1, $clone)
        }
        Update-SlideIndices -Presentation $Presentation
        $Presentation
    }
}