假设我有一个自定义的PowerShell命令将数据导出和使用密码加密。
[Cmdlet(VerbsData.Export, "SampleData")]
public class ExportSampleData : PSCmdlet
{
[Parameter(Mandatory = true)]
public string Password
{
get;
set;
}
/* additional parameters */
}
怎样才能妥善处理密码安全? 例如,我想阻止显示当管理员类型在控制台中的价值。 其他选项包括读取包含加密的密码文件。
我知道PSCredential的,但需要一个用户名,这使得在这种情况下没有任何意义。
如果你只是想获取密码,你可以用
Read-Host
与该cmdlet –asSecureString
参数。
此参数屏蔽输入。
你可以找到这个答案的方式与计算机密码的crypt(关于安全机器的作品)。
使用@Christian响应你可以把密码这样的盘:
PS > $cred.Password | ConvertFrom-SecureString | Set-Content c:\temp\password.txt
并与retreive它:
$password = Get-Content c:\temp\password.txt | ConvertTo-SecureString
$cred = New-Object System.Management.Automation.PsCredential "UserName",$password
修改密码参数SecureString的类型; 如果管理员省略-Password参数,PowerShell中会提示管理员的必备参数,以及显示astrisks对方输入正确的事情。
理想的情况是你的cmdlet的实施将通过SecureString的,以本机支持SecureString的(最安全的)一些API; 如果没有,你就必须提取从SecureString的密码。 下面是关于如何做到这一点的好文章: 如何正确地转换SecureString的为String
如果你正在写一个C#的PowerShell cmdlet和参数的一个要求用户输入应该混淆密码。
要做到这一点,你必须using System.Security;
然后你的参数类型应该是SecureString
。
因此,使用你的例子:
[Cmdlet(VerbsData.Export, "SampleData")]
public class ExportSampleData : PSCmdlet
{
[Parameter(Mandatory = true)]
public SecureString Password
{
get;
set;
}
/* additional parameters */
}
文章来源: How does one securely handle passwords in a custom written PowerShell cmdlet?