Private/ConvertTo-Base64Url.ps1
function ConvertTo-Base64Url { [CmdletBinding()] [OutputType('System.String')] param( [Parameter(ParameterSetName='String',Mandatory,Position=0,ValueFromPipeline)] [AllowEmptyString()] [string]$Text, [Parameter(ParameterSetName='String')] [switch]$FromBase64, [Parameter(ParameterSetName='Bytes',Mandatory,Position=0)] [AllowEmptyCollection()] [byte[]]$Bytes ) Process { if (!$FromBase64) { # get a byte array from the input string if ($PSCmdlet.ParameterSetName -eq 'String') { $Bytes = [Text.Encoding]::UTF8.GetBytes($Text) } # standard base64 encoder $s = [Convert]::ToBase64String($Bytes) } else { # $Text is already Base64 encoded, we just need the Url'ized version $s = $Text } # remove trailing '='s $s = $s.Split('=')[0] # 62nd and 63rd char of encoding $s = $s.Replace('+','-').Replace('/','_') return $s } } |