Private/Convert-SecureStringToPlainText.ps1
<#
.SYNOPSIS This function converts a SecureString to plain text. .DESCRIPTION The Convert-SecureStringToPlainText function takes a SecureString as input and converts it to plain text. It uses the SecureStringToBSTR and PtrToStringAuto methods from the System.Runtime.InteropServices.Marshal class to perform the conversion. After the conversion, it frees the memory that was allocated for the BSTR to ensure that the data is not left in memory where it could potentially be accessed by malicious code. .PARAMETER SecureString The SecureString to be converted to plain text. This parameter is mandatory. .EXAMPLE $SecurePassword = Read-Host "Enter your password" -AsSecureString $PlainTextPassword = Convert-SecureStringToPlainText -SecureString $SecurePassword Write-Host $PlainTextPassword .NOTES Author: Wojciech Napierala Date: 2024-04 #> function Convert-SecureStringToPlainText { param ( [Parameter(Mandatory = $true)] [System.Security.SecureString]$SecureString ) write-verbose "Convert-SecureStringToPlainText" try { # Convert the SecureString to a BSTR $BSTR = [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($SecureString) # Convert the BSTR to a plain text string $PlainTextString = [System.Runtime.InteropServices.Marshal]::PtrToStringAuto($BSTR) # Free the memory that was allocated for the BSTR [System.Runtime.InteropServices.Marshal]::ZeroFreeBSTR($BSTR) # Return the plain text string return $PlainTextString } catch { Show-Error -ErrorVar $_ } } |