我遇到了一个我正在编写的剧本的绊脚石,我希望有更多知识渊博的人能够帮助我。
简单来说,我希望用户能够输入他们的密码,并将该密码的每个字母分配给变量。
$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>
答案 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]