Functions/Data/Compress-Bytes.ps1

function Compress-Bytes
{
    [CmdletBinding()]
    Param 
    (
        # Byte Array to Compress
        [Parameter(Mandatory=$True,ValueFromPipeline=$True,ValueFromPipelineByPropertyName=$True)]
        [byte[]]
        $byteArray,

        # Decompression Flag
        [Parameter(Mandatory=$false)]
        [switch]
        $Decompress
    )
    Process
    {
        if($Decompress -eq $False)
            {
            [System.IO.MemoryStream] $output = [System.IO.MemoryStream]::new()
            $gzipStream = [System.IO.Compression.GzipStream]::new($output, ([IO.Compression.CompressionMode]::Compress)) 
              $gzipStream.Write( $byteArray, 0, $byteArray.Length )
            $gzipStream.Close()
            $output.Close()
            $tmp = $output.ToArray()
            }
        elseif($Decompress -eq $True)
            {
            $input = [System.IO.MemoryStream]::new("",$byteArray)
            $output = [System.IO.MemoryStream]::new()
            $gzipStream = [System.IO.Compression.GzipStream]::new($input, ([IO.Compression.CompressionMode]::Decompress))
            $gzipStream.CopyTo($output)
            $gzipStream.Close()
            $input.Close()
            [byte[]] $tmp = $output.ToArray()
            }
        # Output temporary Byte Array
           $tmp
    }
}