Powershell:使用Sysprep保护string

我有两个PowerShell脚本,我正在build立一个Windows 7的图像。 在映像之前,我运行PRE-IMAGE.ps1,它有这样的一行:

$JoinDomainPassword = Read-Host -Prompt "Please enter the password for $joinDomainUser" -AsSecureString $strPass = $joinDomainPassword | ConvertFrom-SecureString 

然后将$ strPass安全string保存到registry中,然后运行sysprep。

使用sysprep重新启动后,POST-IMAGE.ps1然后从registry中提取$ strPass,并具有这样一行:

 $strPass = $strPass | ConvertTo-SecureString $credentials = New-Object System.Management.Automation.PSCredential ($JoinDomainUser, $strPass) 

但是,POST-IMAGE.ps1中的这些行会得到您在作为不同Windows用户运行convertto-securestring和convertfrom-securestring时将看到的“Key not valid”错误。 (类似于这个问题 ) – 但这里的catch是我-AM-使用相同的用户来转换和安全的string。 我猜这与sysprep有关 – 但是我无法把头绕在里面。

我很抱歉,如果之前已经询问过这个问题,我已经发现了几个涉及这个问题的问题,但是并没有描述我的问题。

Convert*-SecureString cmdlet利用Windows数据保护API来encryption和解密string。

默认情况下,为这种操作组成的encryption密钥特定于进行呼叫的用户账户和进行呼叫的机器。

运行sysprep /generalize ,SysPrep(除其他之外)通过生成新的机器SID和一组新的encryption密钥来核实本地SAM数据库的基础。

这个知识库文章解释了这是如何影响EFS解密的,但是你的问题本质上是一样的

另一种思考方式:
由于机器SID有效地代表了本地用户的login域,所以用户帐户与运行SysPrep之前的定义不同。