Powershell:使用 Sysprep 保护字符串

Powershell:使用 Sysprep 保护字符串

我有两个为 Windows 7 映像构建的 Powershell 脚本。在映像之前,我运行 PRE-IMAGE.ps1,其中有一行如下内容:

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

然后我将 $strPass 安全字符串保存到注册表,并运行 sysprep。

使用 sysprep 重新启动后,POST-IMAGE.ps1 会从注册表中提取 $strPass,并显示如下行:

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

但是,当您以不同的 Windows 用户身份运行 convertto-securestring 和 convertfrom-securestring 时,POST-IMAGE.ps1 中的这些行会出现“密钥无效”错误。(类似于这个问题) - 但这里的问题是我 -AM- 使用同一个用户来转换安全字符串。我猜这与 sysprep 有关 - 但我不明白。

如果之前有人问过这个问题,我深感抱歉,我发现有几个问题涉及到这个问题的部分内容,但并没有描述我确切的问题。

答案1

cmdletConvert*-SecureString利用Windows 数据保护 API加密和解密字符串。

默认情况下,为此类操作编写的加密密钥特定于拨打电话的用户帐户以及拨打电话的机器。

当您运行时sysprep /generalize,SysPrep(以及其它功能)会通过生成新的机器 SID 和一组新的加密密钥来摧毁本地 SAM 数据库的基础。

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

另一种思考方式:
由于计算机 SID 有效地代表了本地用户的登录域,因此用户帐户根据定义与运行 SysPrep 之前的帐户不同。

相关内容