在 Powershell (PowerCLI) 脚本中隐藏默认明文密码

Obscuring Default Plaintext password in Powershell (PowerCLI) script

我正在开发一个 PowerCLI 脚本,该脚本可以从模板部署和配置 VM。在配置阶段,我必须 运行 一些需要来宾的根用户名和密码的命令才能 运行 虚拟机上的脚本。这些是模板的默认凭据,它们以明文形式存储在我的脚本中。配置完成后,我让用户使用 SecureString Credentials 更改密码。

让我担心的是,由于我正在配置的 VM 的性质,如果有人可以找到我拥有的默认纯文本凭据,他们就有很大的 window 机会访问此 VM在我的脚本中。有没有办法在加密的脚本中存储默认凭据?

可以使用受信任的存储和 ConvertTo-SecureString.

来存储针对用户帐户加密的凭据

以下是针对您的帐户加密值的方法,您要加密的值存储在 $Password 中。确保在 $configDir.

下也设置用于将密码存储在文件中的路径
$Password = "SomeValue"
#Path to store the credential
$configDir = "$Env:AppData\WindowsPowerShell\Modules\YourScriptName[=10=].1\Config.ps1xml"
$password = ConvertTo-SecureString "SomeValue" -AsPlainText -Force
$password | ConvertFrom-SecureString | Export-Clixml $configDir -Force

现在,要从加密中恢复密码:

$password = Import-Clixml -Path $configDir -ErrorAction STOP | ConvertTo-SecureString
$Ptr = [System.Runtime.InteropServices.Marshal]::SecureStringToCoTaskMemUnicode($password)
$password= [System.Runtime.InteropServices.Marshal]::PtrToStringUni($Ptr)

最后您的密码将存储在 $password 中。