PublicFunctions/ConvertTo-Base64StringCompressed.ps1

##Modified from Vrushal Talegaonkar's personal script - thanks Vrushal!
<#
    .Description
     Converts a file into a Compressed base64 string in case the regular ConvertTo-Base64String is too long, for instance an Azure ADO string field limit. Enter file path after command.
#>


function ConvertTo-MyBase64StringCompressed {     
    [CmdletBinding()]     
    Param (         
      [Parameter(Mandatory)]         
      [ValidateScript({                 
        if (-Not ($_ | Test-Path) ) {                     
          throw "The file or folder $_ does not exist"                 
        }                
        if (-Not ($_ | Test-Path -PathType Leaf) ) {                     
          throw "The Path argument must be a file. Folder paths are not allowed."                 
        }                
        return $true             
      })]        
      [string] $Path     
    )    
    
    $fileBytes = [System.IO.File]::ReadAllBytes($Path)     
    [System.IO.MemoryStream] $memoryStream = New-Object System.IO.MemoryStream     
    $gzipStream = New-Object System.IO.Compression.GzipStream $memoryStream, ([IO.Compression.CompressionMode]::Compress)     
    $gzipStream.Write($fileBytes, 0, $fileBytes.Length)     
    $gzipStream.Close()     
    $memoryStream.Close()     
    $compressedFileBytes = $memoryStream.ToArray()     
    $encodedCompressedFileData = [Convert]::ToBase64String($compressedFileBytes)     
    $gzipStream.Dispose()     
    $memoryStream.Dispose()     
    return $encodedCompressedFileData 
  }