为什么我需要在注册表中设置两次 Autologon 值才能工作,我可以解决这个问题吗?

Joh*_*Zaj 6 windows-7

背景:作为我正在构建的自动化测试套件的一部分,我需要“按需”在我的虚拟机上设置 Autologon。按需,我的意思是我不想预先配置我的虚拟机或任何快照来设置自动登录,出于安全原因和一个巨大的商业案例。

到目前为止,我的解决方案是:我将脚本复制到来宾计算机,然后使用 Sysinternals PsExec 来执行它。脚本是:

reg add "hklm\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /f /v DefaultUserName /t REG_SZ /d myusername
reg add "hklm\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /f /v DefaultPassword /t REG_SZ /d myfakepassword
reg add "hklm\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /f /v DefaultDomainName /t REG_SZ /d mydomain
reg add "hklm\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /f /v ForceAutoLogon /t REG_SZ /d 1
reg add "hklm\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /f /v AutoAdminLogon /t REG_SZ /d 1
reg add "hklm\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\AutoLogonChecked" /f /ve /d 1
Run Code Online (Sandbox Code Playgroud)

注意:我不认为 Windows 2000 后的机器需要 AutoLogonChecked,但我现在这样做只是为了以防万一。也许 ForceAutoLogon 也不是,还不确定。

问题:我看到 PsExec 正确执行此操作并且所有值都在注册表中,但是当我重新启动机器时,用户不会自动登录......当我第二次运行它然后重新启动机器时,用户终于登录了。

注册表状态之间的差异表明,我第一次运行它时,它缺少 AutoAdminLogon 的“1”和 DefaultPassword 键。我第二次执行它时,这些值完全符合我的预期。

那么,这里发生了什么?这是预期的吗?这篇文章最后声称它真的一切正常(问题是注销脚本正在设置这些值)。然而,似乎对我不起作用。

请注意,这似乎是 Windows 7 独有的,在 Windows XP 中不会发生

另请注意,您不需要 PsExec 来重新创建问题 - 只需自己修改注册表

编辑/更新

  • 以交互方式登录并运行脚本(因此,不要远程执行它),注销会自动让我重新登录(因此,它可以工作)
  • 当我以交互方式登录时,在来宾中远程执行脚本,注销会自动让我重新登录(所以,它可以工作)
  • 如果我之后登录(所以,现在交互式)然后退出,它会重新登录(所以,它然后工作)

编辑/更新 2:这只发生在 Win7x86、Win7x64、Win8x64 上。Windows XP 不会发生这种情况

编辑 3:我使用 Sysinsternal 的 Autlogon.exe 工具得到相同的行为。

小智 1

以纯文本形式在注册表中存储登录名/密码不是一个好主意...我想推荐您查看LogonExpert工具