internal/functions/exchange/attachment/New-MgaAttachmentObject.ps1

function New-MgaAttachmentObject {
    <#
    .SYNOPSIS
        Create new Attachment object
 
    .DESCRIPTION
        Create new Attachment object
        Helper function used for internal commands.
 
    .PARAMETER RestData
        The RestData object containing the data for the new message object.
 
    .PARAMETER ParentObject
        The ParentObject object where the attachment came from.
 
    .PARAMETER ApiVersion
        The version used for queries in Microsoft Graph connection
 
    .PARAMETER ResultSize
        The user to execute this under. Defaults to the user the token belongs to.
 
    .PARAMETER User
        The user to execute this under. Defaults to the user the token belongs to.
 
    .PARAMETER Token
        The access token to use to connect.
 
    .PARAMETER FunctionName
        Name of the higher function which is calling this function.
 
    .EXAMPLE
        PS C:\> New-MgaAttachmentObject -RestData $output
 
        Create a MSGraph.Exchange.Attachment.* object from data in variable $output
    #>

    [Diagnostics.CodeAnalysis.SuppressMessageAttribute("PSUseShouldProcessForStateChangingFunctions", "")]
    [CmdletBinding()]
    param (
        $RestData,

        $ParentObject,

        $ApiVersion,

        [Int64]
        $ResultSize,

        [string]
        $User,

        [MSGraph.Core.AzureAccessToken]
        $Token,

        [String]
        $FunctionName
    )

    $outputHash = [ordered]@{
        Id                   = $RestData.Id
        Name                 = $RestData.Name
        AttachmentType       = [MSGraph.Exchange.Attachment.AttachmentTypes]$RestData.'@odata.type'.split(".")[($RestData.'@odata.type'.split(".").count - 1)]
        ContentType          = $RestData.ContentType
        IsInline             = $RestData.isInline
        LastModifiedDateTime = $RestData.LastModifiedDateTime
        Size                 = $RestData.Size
        User                 = $RestData.user
        ParentObject         = $ParentObject
        BaseObject           = $RestData
    }

    switch ($RestData.'@odata.type') {
        '#microsoft.graph.itemAttachment' {
            $invokeParam = @{
                "Field"        = "messages/$($ParentObject.Id)/attachments/$($RestData.id)/?`$expand=microsoft.graph.itemattachment/item"
                "Token"        = $Token
                "User"         = $User
                "ResultSize"   = $ResultSize
                "ApiVersion"   = $ApiVersion
                "FunctionName" = $FunctionName
            }
            $itemData = Invoke-MgaRestMethodGet @invokeParam

            $outputHash.BaseObject = $itemData
            $outputHash.Id = $itemData.id
            $outputHash.Add("Item", $itemData.Item)

            New-Object -TypeName MSGraph.Exchange.Attachment.ItemAttachment -Property $outputHash
        }

        '#microsoft.graph.referenceAttachment' {
            $outputHash.Add("SourceUrl", [uri]$RestData.SourceUrl)
            $outputHash.Add("ProviderType", [MSGraph.Exchange.Attachment.ReferenceAttachmentProvider]$RestData.ProviderType)
            $outputHash.Add("ThumbnailUrl", [uri]$RestData.ThumbnailUrl)
            $outputHash.Add("PreviewUrl", [uri]$RestData.PreviewUrl)
            $outputHash.Add("Permission", [MSGraph.Exchange.Attachment.referenceAttachmentPermission]$RestData.Permission)
            $outputHash.Add("IsFolder", [bool]::Parse($RestData.IsFolder))

            New-Object -TypeName MSGraph.Exchange.Attachment.ReferenceAttachment -Property $outputHash
        }

        '#microsoft.graph.fileAttachment' {
            $outputHash.Add("ContentId", $RestData.ContentId)
            $outputHash.Add("ContentLocation", $RestData.ContentLocation)
            $outputHash.Add("ContentBytes", [system.convert]::FromBase64String($RestData.contentBytes))

            New-Object -TypeName MSGraph.Exchange.Attachment.FileAttachment -Property $outputHash
        }

        Default {
            New-Object -TypeName MSGraph.Exchange.Attachment.Attachment -Property $outputHash
        }
    }

}