使用Windows 2003,我正在寻找一种方法来创建一个“注销脚本”,它将继续当前的注销,然后立即登录其他用户。因此,“UserA”注销。脚本触发登录“UserB”。
这是我们编写“shell”的计算机应用程序升级的一部分;类似于自助服务终端应用程序。对于升级,我们需要以“管理员”身份登录,然后在升级完成后,注销“管理员”并以“sample_user”身份登录。我们希望在不重新启动的情况下完成此任务。
注意,我不想要一个启动注销的脚本(即“关闭”)。我正在寻找一个script,它将在用户注销时运行(通过组策略设置)。如上所述,脚本应该记录不同的用户。
感谢。
答案 0 :(得分:6)
不要认为可以按照规定的方式(注销时的脚本)。
您必须将计算机设置为自动登录为指定帐户,然后注销(让它自动为您登录)然后您必须通过放置临时登录脚本再次禁用该功能......一般来说听起来很乱。
可以使用微软共享计算机工具包等软件进行实际设置(不太确定“普通”注册表自动登录在手动注销时的行为,但我有一个可自动登录的XP自助服务终端,即使您手动注销 - 您必须使用Shift + logoff之类的某个键来覆盖它,以便能够再次手动指定登录,因此无论如何都可以进行登录。
“最简单”的方式可能是将msgina.dll替换为您自己制作的......
但是你为什么要这样做?只需使用 runas 并启动您需要做的任何其他用户而无需注销控制台用户 - 这是一个多用户系统吗?桌面只是绒毛^^
(无论如何,这将要求您的脚本可以使用这些用户凭据,因为您破坏了该帐户的安全性而使其变得多余 - 从而无视首先拥有该第二个帐户的目的,它存在的目的是什么?)
答案 1 :(得分:4)
我会尝试setting the registry to autologon与您想要的用户,然后只需注销管理员用户。这应该会重新登录您的自助服务终端用户。
答案 2 :(得分:1)
当前用户注销后不确定如何登录其他用户(不确定Windows是否会让您...)
但您可以使用shutdown来注销:
shutdown /?
答案 3 :(得分:1)
以下是一些可能属于“廉价黑客”类别的想法:
如何首先登录UserB,然后使用runas /user:userA <cmd>
运行安装过程的第一部分?
如果这是不可接受的,我知道有一种方法可以让Windows工作站(那些不属于域的工作站)在重启后自动登录到某个用户帐户。也许如果你查看哪些注册表更改发生并重复它们,重启将自动登录该用户。 (当然,作为最后阶段,在用户B登录后,您将不得不还原这些更改: - )
我也想知道是否有一种方法可以让服务强制打开“登录屏幕”以某个用户身份登录。也许使用某种方法,如远程桌面远程执行的方式......如果可能,那么您可以创建一个在注销userA之前安装的服务,这将触发userB的登录。
答案 4 :(得分:1)
您可以使用VNC编写脚本(有许多免费版本,请选择)。在计算机上设置VNC服务器进程以侦听localhost。当用户注销时,您的注销脚本将使用VNC连接到计算机并发送登录下一个用户所需的击键。 VNC使用RFB(远程帧缓冲)协议;有大多数流行语言的库,所以你应该能够快速获得一些工作。或者tools有might帮助。
答案 5 :(得分:0)
如果您使用给定语言运行此类内容作为普通脚本,则很可能无法正常运行,因为当您退出帐户时,所有进程都应与运行脚本一起被终止。
您可以创建某种“服务”,该服务将在服务帐户上运行(即始终处于活动状态),这将自动为您切换此用户。
我的注意力在Windows Powershell上,尽管我并不完全确定它在实际创建服务方面的功能。
快速搜索会显示以下内容(第二个链接指向论坛,但它提到将Powershell作为服务运行并向该服务发送一个参数,该参数将成为用户切换脚本的路径)
答案 6 :(得分:0)
我没有Windows 2003服务器或具有“组策略”设置的系统来测试我的预感,但您可以查看Windows的SU(“切换用户”)。最初是Resource Toolkit的一部分,它已扩展为新的SUperior SU。如果有效,请发布结果/脚本。
答案 7 :(得分:0)
您可以从构建远程控制实用程序(如VNC等)的角度来处理此问题。这里最重要的是,如果你想访问登录屏幕(即CTRL + ALT + DEL /用户名/密码)部分,唯一的问题是Windows服务是唯一可以访问它的组件,所以你要必须创建一个。
我看到这个技术作为一个整体唯一的问题是,即使你花费了大量的精力让它发挥作用(这将是一个相当大的努力),这个成功地完成整个事情的机会源于注销脚本(即当关闭东西时),即使由于以管理员身份重新登录时可能出错的事情数量很少,也很低。
请记住,对于您需要以管理员身份运行的任何内容,Windows中有更简单的方法可以实现(例如,运行方式,更改需要更新的项目的用户权限等)。