functions/security/ConvertTo-EncryptedString.ps1

function ConvertTo-EncryptedString {
    param(
        [Parameter(Mandatory = $true, ValueFromPipeline = $true, ParameterSetName = 'SecureString')]
        [SecureString]$SecureString,
        [Parameter(Mandatory = $true, ValueFromPipeline = $true, ParameterSetName = 'PlainText')]
        [string]$PlainText,
        [Parameter(Mandatory = $false)]
        [ValidateSet('CurrentUser', 'LocalMachine')]
        [System.Security.Cryptography.DataProtectionScope]$Scope = [System.Security.Cryptography.DataProtectionScope]::CurrentUser
    )

    begin {
        $entropy = Get-Entropy
    }
    process {
        if ($PSCmdlet.ParameterSetName -eq 'SecureString') {
            $encryptedData = [System.Security.Cryptography.ProtectedData]::Protect(
                [System.Text.Encoding]::Unicode.GetBytes((ConvertFrom-SecureString $SecureString -AsPlainText)), 
                [System.Text.Encoding]::Unicode.GetBytes($entropy), 
                $Scope)
        }
        else {
            $encryptedData = [System.Security.Cryptography.ProtectedData]::Protect(
                [System.Text.Encoding]::Unicode.GetBytes($PlainText), 
                [System.Text.Encoding]::Unicode.GetBytes($entropy), 
                $Scope)
        }
    
        ConvertTo-Base64 -Bytes $encryptedData
    }    
}