一次系统修复经历


作死的开始

公司的电脑一直使用域账号的方式登陆,不过加域之后默认的策略是所有域账号都可以登陆,这个策略明显不太安全,今天决定把登陆策略改为只有自己的域账号和administrator可以登陆。

cmd中运行 gpedit 打开组策略编辑器,选择计算机配置Windows设置安全设置本地策略用户权限分配 可以看到用户权限这块有很多策略项,每个策略都有一个策略名和本策略适用的用户(组),这里我们需要修改的是允许本地登陆允许通过远程桌面服务登陆拒绝本地登陆 三项。

分别打开三项策略,添加Administrators组到允许本地登陆允许通过远程桌面服务登陆 (Administrators组包含了本人的域账号和administrator用户),其他群组加入到 拒绝本地登陆 中。 搞定,重启电脑。

问题出现

电脑重启后发现使用任何账号都无法登陆了。不管是域账号,.\域administrator 都无法登陆。提示:不允许使用你正在尝试的登陆方式,请联系你的网络管理员。很明显,修改之后的组策略导致系统无法正常登陆了。

错误

此时我发现,我给自己挖了一个大坑,并且跳了进去。。。

逻辑悖论: 无法登陆是由于组策略的设置导致的,然而,想要将组策略设置改回来,又必须得先登录进入系统。

怎么办

冷静3分钟后,决定找IT的同事帮忙,IT用U盘的PE系统启动了机器,然后读取C盘的密码文件,强制修改.\域administrator 的密码。之后重新尝试登陆,依然失败:不允许使用你正在尝试的登陆方式,请联系你的网络管理员。

看到这个情况,很遗憾,IT表示搞不定。

无奈,只能靠自己,将IT的PE盘借过来,进入系统打开C:\Windows\System32\gpedit.msc 尝试在PE系统中修改组策略。发现msc文件虽然可以打开,但是并无任何内容。难道是环境变量的问题?修改系统的Path变量,最前面加上C:\Windows\System32\; 重新尝试,依然无任何内容。究竟是什么原因呢?尝试在cmd中输入gpedit 回车,发现弹出一个错误框,缺少一个*api*.dll文件。到这里,原因似乎清晰了,PE系统为win8,而我的系统为win10,估计两个系统的gpeidt运行所依赖的dll不同。解决这个问题,需要自己做一个相同系统版本的PE,成本和风险太大,此路不通。

难道只剩重装这最后一条路了吗?

答案当然是NO,否则我也不会专门写一篇有价值的博客了,哈哈。

让我们再回头看看那个逻辑悖论: 无法登陆是由于组策略的设置导致的,然而,想要将组策略设置改回来,又必须得先登录进入系统。

转机

要想将组策略设置改回来,必须先登录进系统吗?常识告诉我们:YES!然而常识往往是狭隘的,修改组策略其实只需要调用一个cmd命令,我们只需要在不登陆系统的情况下将windows的命令提示框显示出来就可以了。

那么,如何做呢?

你有没有仔细观察过Windows的登陆界面?

win10-login

没错,右下角的轻松使用很重要。

轻松使用

我们可以利用轻松使用当中的屏幕键盘。

屏幕键盘作为Windows的一个原装软件,它的运行文件就是:C:\Windows\System32\osk.exe

我们可以将这个文件替换为同目录下的cmd.exe ,这样进入登陆界面后点击屏幕键盘弹出的就是cmd命令提示框了。

进入PE系统,将C:\Windows\System32\osk.exe 备份到其他目录,然后删掉,将C:\Windows\System32\cmd.exe 改名为osk.exe ,重启进入登陆页,点击屏幕键盘,命令提示框就弹出来了。然后运行gpedit ,组策略编辑器就弹出来了。而且数据能够正常显示,此处也并没有出现用户权限问题。将之前的拒绝本地登陆策略置为空,重新域账号登陆,终于顺利进入系统!

后记

到此,问题也就告一段落了,值得注意的是,后面需要重新进入PE系统将cmd.exeosk.exe 复原回来。