将密码存储为多个变量

时间:2016-02-23 14:02:33

标签: powershell variables input

我遇到了一个我正在编写的剧本的绊脚石,我希望有更多知识渊博的人能够帮助我。

简单来说,我希望用户能够输入他们的密码,并将该密码的每个字母分配给变量。

$uCcuGUBIJnoORUWA = "a"
$LjN6WLzWVAaM4BQN = "b"
$5qJ79dPkDGNeIsVy = "c"

......等等。

完成此操作后,密码将发送到文本文件并作为变量输出。因此,如果您的密码是“abc”,那么文本文件将显示为......

HASH1 = $uCcuGUBIJnoORUWA
HASH2 = $LjN6WLzWVAaM4BQN
HASH3 = $5qJ79dPkDGNeIsVy

......等等。

一旦密码完全写入并存储在文本文件中,脚本的其余部分就会使用该信息来匹配每段代码,以确定密码是什么。然后它会使用类似的东西输入密码:

[System.Windows.Forms.SendKeys]::SendWait("$uCcuGUBIJnoORUWA$LjN6WLzWVAaM4BQN$5qJ79dPkDGNeIsVy")

现在我的脚本使用的是硬编码密码,这不太理想。我正在使用PS2EXE将.ps1文件转换为.exe文件,因此它不是纯文本格式。

我理解如何存储变量以及如何让脚本将变量输出为实际字母,我只是在找出一种方法让用户输入密码然后存储它。 / p>

1 个答案:

答案 0 :(得分:1)

比混淆更好的东西:实际加密?

将凭据存储在socket.Close/Request对象中。密码部分存储为安全字符串,这已经很好了。

将其导出到文件:

[PSCredential]

要重新导入它:

$cred | Export-Clixml -Path C:\master.xml

重要的是密码在写入磁盘时会被加密。它只能由同一台计算机上的相同用户解密(并因此重新导入)。

因此,我喜欢将用户和计算机名称作为文件名的一部分。以下是存储凭据的脚本示例:

$cred = Import-Clixml -Path C:\master.xml

在您真正想要使用它的脚本中:

$cred = Get-Credential
$cred | Export-Clixml -Path "C:\whatever\master_$env:COMPUTERNAME-$env:USERNAME.xml"

非常有用。通过在文件名中嵌入用户和计算机,您可以存储凭证的多个副本,具体取决于在多台计算机上需要访问多少用户。

由于您可能需要在脚本中使用原始密码,因此从$cred = Import-Clixml -Path "C:\whatever\master_$env:COMPUTERNAME-$env:USERNAME.xml" 对象中获取该密码的方式如下:

[PSCredential]