Windows 7-VBS 脚本更改上次登录的用户

Windows 7-VBS 脚本更改上次登录的用户

在 Windows XP 中,我曾经使用客户端计算机将其用户帐户设置为最后登录的用户后运行 VBS 脚本。

不幸的是,该脚本在 Windows 7 中不再起作用。(导致一些用户在尝试登录时锁定我的帐户并发现他们的密码与我的不一样!)

下面是我使用的脚本示例:

http://www.itsupportguides.com/vbs-scripts/using-vbs-to-set-the-last-user-logged-on-windows-xp

编辑:有关我们环境的附加信息

我们的环境:

  • UAC 已启用
  • 以“itsupport”帐户(本地管理员组成员)身份登录
  • 所有系统现在都已安装 Windows 7 Enterprise
  • 所有系统均加入 Active Directory 域

答案1

感谢那些帮助解决这个问题的人。

经过进一步的研究,我发现 Windows 7 不使用相同的“Winlogon”注册表项来存储最后登录的用户,而是使用

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\LogonUI\LastLoggedOnUser

我遇到的第二个问题是允许 VBS 脚本以提升的用户(管理员)身份运行,而无需使用“runas”或提升的命令提示符。

经过反复试验后,我创建了以下脚本,该脚本成功更改了域中添加的 Windows 7 工作站的最后登录用户。

希望这里的其他人会发现它有用 - 我知道我会的!

设置上次登录 - Win7.vbs

    '--------------
'Start of UAC workaround code

If WScript.Arguments.length =0 Then
  Set objShell = CreateObject("Shell.Application")

  objShell.ShellExecute "wscript.exe", Chr(34) & _
  WScript.ScriptFullName & Chr(34) & " uac", "", "runas", 1
Else

'--------------
'Start of code

    dim WSHShell
    Set WSHShell = Wscript.CreateObject("WScript.Shell")
    dim strRegKey
    strComputerName = wshShell.ExpandEnvironmentStrings( "%COMPUTERNAME%" )
    strRegKey = "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\LogonUI\"

    StrUser = InputBox("Please enter in username," & vbCrLf & vbCrLf & "e.g. joe.local", "Set Last logged on", "UserName")
    StrDomain = InputBox("Please enter in domain for logon," & vbCrLf & vbCrLf & "e.g. DOMAIN", "Set Logon Domain OR leave blank if a local user account")

    If StrDomain = "" then
         StrDomain = "."
       Else
    End If

    wshShell.RegWrite strRegKey & "LastLoggedOnUser", StrDomain & "\" & StrUser, "REG_SZ"

        WScript.Echo "Setup Completed. Please restart the computer to complete the process"

    '--------------
    'End of code


    '--------------
    'End of UAC workaround code

    End If

完整来源:Windows 7-VBS 脚本更改上次登录的用户

答案2

我猜 Windows 7 会在您运行脚本后某个时间配置注册表。可能是在您注销时。您可以执行一些操作,例如将用户名存储在注册表中的自定义项下(HKLM\Software\MyCompany这很常见)。然后,您可以编写一个关机或启动脚本,该脚本执行以下操作:

  1. 从自定义键的值中读取用户名。如果为空,则不执行任何操作并退出。
  2. 设置HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\WINLOGON\值以使用该用户名。
  3. 将自定义注册表项中的用户名值清空。

这取决于 Windows 何时填充该注册表项以及它如何确定最后登录的用户。您可以使用远程注册表(regedit 或reg.exe)来确定 WinLogon 值中的数据。

答案3

我在我的 Win 7 x64 Enterprise 机器上进行了一些测试。没有管理员权限的用户也可以启动该脚本,并且所有提示都正确显示。诀窍是在具有本地管理员权限和请求的管理访问令牌的帐户下启动该脚本(默认情况下,本地管理员用户在请求之前没有完全管理员权限)。

要正确运行脚本,请以管理员权限启动 cmd(开始,在开始菜单搜索中输入 CMD,右键单击 cmd 并选择“以管理员身份运行”),然后从此 CMD 窗口内启动脚本。

相关内容