部署升级后的 Microsoft 部署工具包设置 SystemAutoLogon 注册表项 OS

Microsoft Deployment Toolkit setting SystemAutoLogon registry key when deploying upgraded OS

我正在尝试通过 MDT 部署已通过 MDT "Standard Client Upgrade" 任务序列升级的映像。我的镜像一开始是Win10 v1607镜像,后来更新到v1703,然后截取。

当我去部署捕获的图像时,我会在第一次登录时收到一个弹出窗口,提示找不到 c:\LTIBootstrap.vbs。挖掘,我发现在安装 OS 并重新启动 PC 后,MDT 任务序列继续 运行 作为 SYSTEM 帐户。这很奇怪,因为它通常以内置管理员帐户运行。

出于某种原因,即使 unattend.xml 文件包含通常的 AutoAdminLogon 条目,

处的注册表项
HKLM\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\SystemAutoLogon

正在创建并在部署期间设置为 1。 (我通过比较部署结束时的注册表发现了这一点。)捕获的映像中不存在此密钥。 如果我部署一个手动更新到 v1703 的映像(通过 Windows 更新而不是 MDT),则不会创建此密钥。

关于为什么可以忽略 unattend.xml 或什么会导致创建和设置 SystemAutoLogon 的任何想法?

我明白是怎么回事了。

MDT 升级任务序列使用指向 setupcomplete.cmd 的命令行 /postoobe 选项调用升级。这会导致文件被复制到 c:\windows\setup\scripts\setupcomplete.cmd。 windows 安装完成后,如果该位置存在文件,则该文件位于 SYSTEM 帐户下 运行。

问题是即使在升级任务序列完全完成后此文件仍然存在。因此,如果您随后捕获映像并将其部署到真实机器上,它将在部署后看到 setupcomplete.cmd 和 运行,而不是使用通常的默认管理员帐户。

我想这个文件位于 c:\windows... 是导致上述注册表更改的原因。 setupcomplete.cmd 仅用于 bootstrap 升级回 MDT 任务序列,需要从 c:\windows... 任务序列完成后删除 运行宁.

知道升级任务序列的 post-upgrade 部分 运行s 作为 SYSTEM 而不是 Administrator 通过与标准部署截然不同的机制很重要,因为然后有限制你可以做什么。默认情况下,该序列允许您安装应用程序。它们必须是可以由 SYSTEM 安装的应用程序。

现在我已经更新了我的脚本目录中的本地 SetupComplete.cmd 以在完成时通过将最后一个 for 循环更改为此来删除自身(在阻止退出 echo):

for %%d in (c d e f g h i j k l m n o p q r s t u v w x y z) do if exist %%d:\Windows\Setup\Scripts\setupcomplete.cmd ( 
del /q /f %%d:\Windows\Setup\Scripts\setupcomplete.cmd
echo %DATE%-%TIME% Exiting SetupComplete.cmd >> %WINDIR%\Temp\setupcomplete.log)

在考虑更多并遇到由于 运行ning 作为 SYSTEM 帐户引起的问题后,我开始尝试避免将 运行ning 作为 SYSTEM 帐户。 (一个大问题是,如果您想在重启后立即在任务序列结束时关机,SYSTEM 启动 运行 太快,并且在 MDT 中调用关机失败。)

想法是使用 SetupComplete.cmd 运行ning 作为 SYSTEM 来简单地 bootstrap 回到 运行ning 作为默认管理员的任务序列。

实现这个有一些问题。即,运行 来自 unattend.xml 的同步命令在正常安装期间不会 运行,因此诸如启用管理员、禁用管理员的 uac、禁用用户帐户页面、禁用异步 [=32] =] 一旦所有都必须手动调用。除此之外,只需在 OS 升级完成后通过任务序列中的一个步骤调用 PopulateAutoAdminLogon 和 SetStartMDT 来设置正确的注册表项,然后执行重启即可。这似乎工作得很好。执行此操作的理想方法是让调用 PopulateAutoAdminLogon/SetStartMDT 的相同脚本也解析 unattend.xml 和 运行 这些命令。

出于某种原因 shell 隐藏不起作用,即使为它设置了所有内容。我最好的猜测是任务序列 运行ner 这样做是因为设置了 IsOSUpgrade,但我不确定。

采用这种方式,SetupComplete.cmd只负责单个bootstrap回任务序列,任务序列可以在调用脚本的同时删除它PopulateAutoAdminLogon/SetStartMDT

要完全完善这种方法还有很多工作要做,我现在只解决一个自动登录问题,但在进行升级时,它确实是一种更好的 MDT 工作方式。希望他们将来能充实它。