Public/PaCertificate/Set-PaCertificate.ps1

function Set-PaCertificate {
    [CmdletBinding()]
    Param (
        [parameter(Mandatory=$True,Position=0)]
        [String]$CertificateName,

        [parameter(Mandatory=$True,Position=1)]
        [String]$CertificateFile,

        [parameter(Mandatory=$True,Position=2)]
        [String]$CertificatePassphrase
    )

    BEGIN {
        $VerbosePrefix = "Set-PaCertificate:"
        function New-MultipartFileContent {
            [OutputType('System.Net.Http.MultipartFormDataContent')]
            [CmdletBinding()]
            param(
                [Parameter(Mandatory)]
                [System.IO.FileInfo]$File,
                [string]$HeaderName='file'
            )

            # build the header and make sure to include quotes around Name
            # and FileName like https://github.com/PowerShell/PowerShell/pull/6782)
            $fileHeader = [System.Net.Http.Headers.ContentDispositionHeaderValue]::new('form-data')
            $fileHeader.Name = "`"$HeaderName`""
            $fileHeader.FileName = "`"$($File.Name)`""

            # build the content
            $fs = [System.IO.FileStream]::new($File.FullName, [System.IO.FileMode]::Open)
            $fileContent = [System.Net.Http.StreamContent]::new($fs)
            $fileContent.Headers.ContentDisposition = $fileHeader
            $fileContent.Headers.ContentType = [System.Net.Http.Headers.MediaTypeHeaderValue]::Parse('application/octet-stream')

            # add it to a new MultipartFormDataContent object
            $mp = [System.Net.Http.MultipartFormDataContent]::new()
            $mp.Add($fileContent)

            # get rid of the quotes around the boundary value
            # https://github.com/PowerShell/PowerShell/issues/9241
            $b = $mp.Headers.ContentType.Parameters | Where-Object { $_.Name -eq 'boundary' }
            $b.Value = $b.Value.Trim('"')

            # return an array wrapped copy of the object to avoid PowerShell unrolling
            return @(,$mp)
        }
        
    }

    PROCESS {
        $BodyLines = New-MultipartFileContent -File $CertificateFile
        $QueryString = @{}
        $QueryString.type = 'import'
        $QueryString.category = 'keypair'
        $QueryString.'certificate-name' = $CertificateName
        $QueryString.'format' = 'pkcs12'
        $QueryString.'passphrase' = $CertificatePassphrase       

        $ReturnObject = $Global:PaDeviceObject.invokeApiQuery($QueryString, 'POST', $BodyLines)
    }

    END {
        $ReturnObject
    }
}