How does one securely handle passwords in a custom written PowerShell cmdlet?

巧了我就是萌 提交于 2019-12-02 00:34:44

If you only want to obtain the password, you can use

Read-Host cmdlet with the–asSecureString parameter.

This parameter mask the input.

JPBlanc

You can find in this answer a way to crypt with the computer password (works on safe machines).

Using @Christian response you can put the password to the disk like this :

PS > $cred.Password | ConvertFrom-SecureString | Set-Content c:\temp\password.txt

And retreive it with :

$password = Get-Content c:\temp\password.txt | ConvertTo-SecureString
$cred = New-Object System.Management.Automation.PsCredential "UserName",$password

Change the type of the Password parameter to SecureString; if the administrator omits the -Password parameter, PowerShell will do the right thing by prompting the administrator for the mandatory parameter and display astrisks as they type.

Ideally the implementation of your cmdlet will pass the SecureString to some API that natively supports SecureString (most secure); if not, you'll have to extract the password from the SecureString. Here's a good article on how to do that: How to properly convert SecureString to String

If you are writing a C# PowerShell Cmdlet and one of the parameters requires the user to enter a password it should be obfuscated.

To do this you need to be using System.Security;

And then your parameter type should be SecureString.

So using your example:

[Cmdlet(VerbsData.Export, "SampleData")]
public class ExportSampleData : PSCmdlet
{
    [Parameter(Mandatory = true)]
    public SecureString Password
    {
        get;
        set;
    }

/* additional parameters */
}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!