private/ConvertTo-UnprotectedBytes.ps1



if($null -eq (Get-Command ConvertTo-UnprotectedBytes -EA SilentlyContinue)) {

    function ConvertTo-UnprotectedBytes() {
        Param(
            [Parameter(Position = 0, ValueFromPipeline = $true)]
            [SecureString] $SecureString,

            [String] $Encoding = "UTF-8"
        )



        $enc = [System.Text.Encoding]::GetEncoding($Encoding)

        $bstr = [IntPtr]::Zero;
        $charArray = New-Object 'char[]' -ArgumentList $SecureString.Length

        try
        {

            $bstr = [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($SecureString);
            [System.Runtime.InteropServices.Marshal]::Copy($bstr, $charArray, 0, $charArray.Length);

            $bytes = $enc.GetBytes($charArray);
            return $bytes
        }
        finally
        {
            [System.Runtime.InteropServices.Marshal]::ZeroFreeBSTR($bstr);
        }
    }

}