Public/New-EncryptedPasswordFile.ps1
function New-EncryptedPasswordFile { <# .SYNOPSIS Creates a file with a password as an encrypted string. .DESCRIPTION This function converts the specified secure string password to an encrypted string, and outputs it to the specified file system path. .EXAMPLE PS C:\PS> New-EncryptedPasswordFile -Path "C:\PowerShell Passwords\Passwd.txt" Description ----------- This creates an encrypted password file 'Passwd.txt' in the 'C:\PowerShell Passwords' directory. .EXAMPLE PS C:\PS> New-EncryptedPasswordFile -Path "C:\PowerShell Passwords\Passwd.txt" Description ----------- This creates an encrypted password file 'Passwd.txt' in the 'C:\PowerShell Passwords' directory. .PARAMETER Password Specifies a secure string object containing the password. .PARAMETER Path Specifies a path for the file to be created. .INPUTS securestring, System.String You can pipe a file system path (in quotation mark) to this function. .OUTPUTS None Creates a file using the specified file path. #> #Requires -Version 6.2 [CmdLetBinding()] param ( # Output file path [Parameter(Mandatory, ValueFromPipeline)] [ValidateNotNullOrEmpty()] [ValidateScript( # Parent directory path validation { Split-Path -Path $PSItem -Parent | Test-Path -PathType Container }, ErrorMessage = "The parent of the path entered '{0}' does not exist." )] [Alias("File", "FilePath")] [string] $Path ) begin { # Error handling Set-StrictMode -Version "Latest" Get-CallerPreference -Cmdlet $PSCmdlet -SessionState $ExecutionContext.SessionState $CallerEA = $ErrorActionPreference $ErrorActionPreference = "Stop" } process { try { # Secure string password prompt Write-Debug -Message "Reading string from host as a secure string" Write-Verbose -Message "Prompting for password from host" $Password = Read-Host -Prompt Password -AsSecureString # Encrypted string out to file path Write-Debug -Message "Converting to encrypted string and writing to '$Path'" Write-Verbose -Message "Saving password as an encrypted string" ConvertFrom-SecureString -SecureString $Password | Out-File -FilePath $Path -Force } catch { Write-Error -ErrorRecord $PSItem -ErrorAction $CallerEA } } } |