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

Passwords 在Powershell(PowerCLI)脚本中隐藏默认明文密码,passwords,powercli,Passwords,Powercli,我正在编写一个PowerCLI脚本,该脚本通过模板部署和配置vm。在配置阶段,我必须运行一些命令,这些命令需要来宾的根用户名和密码才能在VM上运行脚本。这些是模板的默认凭据,它们以明文形式存储在我的脚本中。配置完成后,我让用户使用SecureString凭据更改密码 让我担心的是,由于我正在配置的VM的性质,如果有人能在我的脚本中找到默认的纯文本凭据,他们就有很大的机会访问此VM。是否有办法在加密的脚本中存储默认凭据?可以使用受信任的存储和转换到SecureString来存储针对用户帐户加密的凭

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


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

可以使用受信任的存储和
转换到SecureString来存储针对用户帐户加密的凭据

下面介绍如何针对您的帐户加密值,您要加密的值存储在
$Password
中。确保在
$configDir
下设置a路径以将密码存储在文件中

$Password = "SomeValue"
#Path to store the credential
$configDir = "$Env:AppData\WindowsPowerShell\Modules\YourScriptName\0.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

中。必须在每个用户帐户上运行此脚本,对吗?我将把这些脚本(以及这个VM模板)提供给不同的客户机,这些客户机对Powershell的了解差异很大。为了适应最低的公分母,我必须将您的代码作为脚本提供给他们。但问题是默认密码仍将以明文形式存在其中。我想我可能必须指示客户端在使用密码初始化脚本后删除它,或者自己删除它。第一位的输出是一个ps1xml文件,可以使用第二位的代码将其转换回明文密码。但是,这只能在加密的同一台计算机上使用。具体来说,如果您使用来自某台pc的这些脚本向VM发送指令,则使用这种方法应该是安全的。只有有人登录到这台电脑,因为你可以解密文件,并获得虚拟机的默认值