XP忘记密码问题[转帖]
近来发现总有人问关于XP忘记密码的问题,在这里我再给大家说一下
遗失WinXP的用户密码,如果只设置了一个用户会造成系统无法登录,这时一个最简单的方法是重启到安全模式下,以Adminstrator用户登录,但如果Adminstrator用户也设置了密码,就麻烦了。本文收集了几种解决办法,与大家共享。
一、利用屏保移花接木法。此法有两个前提,一是系统启用了默认屏保,二是保证你的系统分区是FAT32文件系统,若是NTFS文件系统,则需要使用NTFS For DOS工具制作软盘,以便能够进入系统分区操作
①、使用DOS启动盘进入纯DOS状态。
②、执行以下操作:
C:
Cd\windows\system32
Md bak (创建备份文件夹)
Copy logon.scr bak\logon.scr
Copy cmd.exe bak\cmd.exe
Del logon.scr
Ren cmd.exe logon.scr
③、重启,在登录界面静静等待10分钟以后,出现屏保,进入命令行状态。
④、使用命令:net user <用户名> <新密码> /add 强制将该用户的口令更改掉。
⑤、重启,用该用户及新口令登录。
⑥(若想添加一个新用户,在第四步键入:net user <新用户名> <新密码> /add 添加后可用:net localgroup administrators 新用户名 /add 命令将用户提升为计算机管理员。)
二、使用脚本恢复Windows XP用户密码
①编写一个批处理文件a.bat,内容为:“net user <用户名> 123”(即将系统的某用户的密码更改为123);
②编写一个启动/关机脚本配置文件scripts.ini,这个文件名是固定的,不能改变。内容如下:
[Startup]
0CmdLine=a.bat
0Parameters=
③将上述两个文件保存到一张软盘中,用启动软盘启动进入DOS下,将a.bat保存到C:\WINDOWS\system32\GroupPolicy\Machine\Scripts\Startup下(GroupPolicy为系统隐藏文件夹,需去除系统隐藏属性),将scripts.ini保存到C:\WINDOWS\system32\GroupPolicy\Machine\Scripts下;
④取出软盘,重启。用设定的用户名和密码登录,登录成功后删除上述两个文件。
三、用DreamPackPL工具制作Windows系统万能解密光盘,DreamPackPL下载地址:http://www.d--b.webpark.pl/down/dreampackpl-2004-05-12.zip
四、使用Win2000安装盘登录,据称这是一漏洞。使用Windows 2000 Poessional安装光盘引导电脑启动,在Wndows2000安装选择界面选择修复Windows 2000(按R键),然后选择使用故障控制台修复(按C键),系统会扫描现有的Window2000/XP版本。如果只有一个操作系统,所以只列出了一个登录选择(l:C:\Windows)。从键盘上按l,然后回车。。(此法摘自董爷前几天发的一个帖子,哈哈。详见下文)
(董爷) 2004-8-29 8:29:31
前不久,网络上出现一条新闻,说国外的Windows专家发现,使用Win 2000安装光盘启动电脑可以不要Windows XP管理员密码即进人Windows
XP的故障恢复控制台模式。
这是真的吗?我做了一番测试。
我使用的Wndows XP版本是Windows XP Proessional,使用的 Windows 2000版本是集成SP3的Windows Proessional简体中文版。我先在C盘
(FAT322文件系统)上安装了Windows XP Proessional,安装的时候设置了Administraor账户密码。为了确认Administrator密码已经设置成功
,我切换为经典的Windows登录方式,然后使用Adndnistrato账户登录。可以看到,登录的时候已经需要密码了,Administrator账户的密码设
置是没有问题的了。
重新启动了电脑,使用Windows 2000 Poessional安装光盘引导,在Wndows2000安装选择界面选择修复Windows 2000(按R键);,然后选
择使用故障控制台修复(按C键),系统会扫描现有的Window2000/XP版本。由于笔者只有一个操作系统,所以只列出了一个登录选择(l:C:
\Windows)。从键盘上按l,然后回车,这个时候,果然如国外所传,Window XP并没有要求输人管理员密码,而是直接登录进入了故障恢复控
制台模式(如果使用的是Windows XP安装光盘启动的,那是要求输人管理员密码的。这里指的管理员是指系统内建的Administraor账户)(如
图)。熟悉Windows的朋友都知道,故障恢复控制台里面可以进行任何系统级别的操作,例如:复制、移动、删除文件,启动、停止服务,甚至
格式化、重新分区等破坏性操作。
接着,为Windows XP 安装了SPI补丁,再次使用 WindowS 2000安装光盘引导,重复上面的操作,发现结果一样,还是没有任何密码输人要
求、由于先前使用的是FAT32文件系统.我猜想是不是由于FAT3Z的文件系统造成的这种情况。于是使用Wndows XP里面的Convert命令将FAT3Z文
件系统转换成NTFS文件系统,然后再次使用Windows 2000安装光盘引导,重复上面的操作,发现结果一样,还是没有任何密码输人要求。看来
这个漏洞是真的存在的。
需要注意的是,由于各种原因,市面上的一些Windows 2000安装光盘不能够显现故障控制台登录选项,所以也无法利用这个漏洞。同时,
由于故障控制台模式本身的限制,也无法从网络上利用这个漏洞,换句话说,这个漏洞仅限于单机,所以危害性不是非常大。
我又使用集成了SP3的Wndows 2000 Server英文正式版光盘启动,发现漏洞依然存在、看来不单是中文版有这个问题的存在,英文版也同样
存在这个问题。
注:由于我还有一个Windows 98,无法将C盘转换为NTFS文件系统。所以基于NTFS文件系统的测试是在VMware虚拟机里面测试的。
原贴:解决WinXP遗失密码不能登录之四招
1。清除sam文件:
winnt系列的系统账户信息是存在%systemroot%\system32\config\sam这个注册表文件里的。如果系统里没有重要的账户,或者账户比较少,用删除%systemroot%\system32\config\sam的方法是比较简单的,不过因为系统会还原为只有administrator(密码为空)和guest二个账户,所以有些程序因为它们所依赖的账户丢失了,如iis、vmware就不能启动了。
原来听说这种方法只能适用于nt workstation系列(2kpro),不能用于server,我在2000professional和2000 advanced server上试验都是成功的。不知道为什么会有上述说法,可能是活动目录ad下不行把。
当然首先你要能够访问系统分区,来把sam文件改名或者删除。如果是fat32、fat分区,使用98启动盘就行了。如果是ntfs分区,可以使用winternal的ntfs for dos、ntfs for 98或者是支持ntfs的启动光盘,再或者挂到其他win2000、linux等机器上,再再或者重新安装一个新的win2000。
2。专用工具:
windows管理员密码丢失还有一个解决方法是使用petter nordahl-hagen的the offline nt password editor(http://home.eunet.no/~pnordahl/ntpasswd/),这个工具是离线修改注册表文件sam来设置密码的。需要用他的映像文件制作启动盘来引导,进而访问ntfs分区重新设置密码;虽然作者经常更新他的程序,不过我还是会担心他直接操作sam文件的安全性,可能有时会导致系统出错。
可能还有其他类似工具把,恕我无知。
3。 还有一种想法就是用一个修改密码的小程序来替换系统启动的必要程序,然后系统启动时就会替换密码,随后把被替换的程序在还原就行了。当然首先你还是要能够访问系统分区,来替换随系统启动的程序。
替换系统启动的必要程序的一种方法是我写的一个清除administrator密码的小程序(cleanpwd),他所作的就是把administrator密码清空。使用方法如下:
(2).用法
1) 用双系统或者启动盘或者挂到别的系统上,如果是ntfs分区其他系统或启动盘要能读写ntfs分区,把windows安装目录下的system32\svchost.exe改名svchost.bak.exe备份,把cleanpwd.exe拷贝成svchost.exe。
2) 启动该系统,就把administrator的密码清空了,可以直接登陆。
3) 把svchost.bak.exe 恢复就行了。(如果使用替换的是svchost,最好再启动rpc服务)
(3).为什么选用svchost.exe而不是其他程序。
每个windows2000系统都有这几个进程,
system(kernel executive and kernel)
smss(session manager)
csrss(win32 subsystem)
winlogon(logon process)
services(service control manager)
lsass(local security authentication server )
如果任何一个被杀掉或者出错,系统将重新启动。不过在lsass启动之前你不能修改密码,所以不能选用这几个程序。
另外系统中一般还有以下一些程序:
svchost.exe(remote procedure call (rpc) 还有其他一些服务)
wbem\winmgmt.exe(windows management umentation)
mstask.exe(task scheduler)
regsvc.exe(remote registry service)
可能还有其他服务程序,你可能禁止了除rpc之外的其他服务,但不会禁止rpc,否则系统工作就不正常了。所以我选择了svchost,如果你知道其他服务会自动启动,你也可以选择它。
当然如果系统安装了杀毒软件的话,你替换杀毒软件也可以,因为一般杀毒软件都会在系统启动是启动杀毒防火墙来杀毒的。
(4).其他
有这个想法是几个月之前了,不过一直没有写这个程序 程序运行会在c:\cleanpwd.txt记一个简单的日志,我也附了源码,你可以任意修改它以满足自己的要求,比如添加一个用户而不是修改管理员的密码(或者你把管理员改名了)。
4。我还在一个网站上看到这样一个方法:
就是把%systemroot%\system32\logon.scr替换为cmd.exe或者explorer.exe,然后在系统登陆处等待,过一会,系统就会去运行logon.scr这个屏保,因为你替换了这个屏保文件,所以实际上运行的是cmd.exe或者explorer.exe,并且是localsystem权限,于是你可以随便了,最简单的就是在cmd.exe里运行net user administrator "",成功后管理员密码也被清空了,关闭cmd或者explorer就可以用空口令登陆了。
其实这种方法和上边的那种思路是一致的。
================= code begin =======================
#include
#include
#include
#include
#include
#pragma comment(lib, "netapi32.lib")
#define lof_file "c:\\cleanpwd.txt"
dword setuserpwd(char *user, char *pass);
void banner(file *fp)
{
if(null == fp)return;
fprintf(fp, "clean administrator''s password tool 1a. for lost password.\n");
fprintf(fp, " by bingle@email.com.cn\n");
fprintf(fp, "website: www.binglesite.net\n");
}
int main(int argc, char *argv[])
{
banner(stderr);
file *fp = fopen(lof_file, "a");
if(fp)
{
fprintf(stderr, "log in file %s\n", lof_file);
banner(fp);
}
if(!fp) fp = stderr;
char buff[256];
fprintf(fp, "%s: clean administrator''s password ", _strtime(buff));
dword n = setuserpwd("administrator", "");
if(nerr_success == n) fprintf(fp, "ok.\n");
else fprintf(fp, "failed, error:%d\n", n);
fclose(fp);
return -1;
}
dword setuserpwd(char *user, char *pass)
{
wchar_t wuser[pwlen], wpass[pwlen];
user_info_1003 ui;
mbstowcs(wuser, user, strlen(user)+1);
mbstowcs(wpass, pass, strlen(pass)+1);
ui.usri1003_password = wpass;
return netusersetinfo(null, wuser, 1003, (lpbyte)&ui, null);
原贴:关于WIN2000pro/ XP pro用户丢失密码的处理方法
【原创】丢失XP密码后的又一招
丢失XP密码后的又一招
fyland
在win2000里丢失管理员密码后,删除SAM文件来清空密码确实是一个很好的方法。但如果是在XP里呢?网上很多人说不行。我试了一下,删除重新启动进入到登陆画面实时,系统提示:“安全帐户管理器初始化失败”,点“确定”后又重新启动。难道这种方法在XP里真的不行吗?按照下面的几步做了后在下结论吧。
用启动盘进入DOS,依次输入:del c:\windows\system32\config\sam
copy c:\windows\repair\sam c:\windows\system32\config
再重新启动后,就可以发现不用输入密码直接登陆了。此时,登陆用的帐户是administrator,桌面上只有很少的几个图标(原来的用户名就是这个的除外)。不过还好,安装过的软件都可以从“程序”中打开。如果原来的用户名不是administrator,那就还没达到我们的目的。在运行里输入“cmd”,然后在命令提示符下依次输入(比如原来的用户名是fyland):
net user fyland /add
net localgroup administrators fyland /add (如果以前就是受限用户就不需要这步了)。
当然,这两步可以在控制面板中设置,具体方法就不用多说了。
重新启动后选择你原来的帐户登陆,再看看桌面以及设置的项目是不是和以前一样?最后一步就是你自己设置开机密码了。
这种方法最关键是repair文件下有一个备份过的SAM文件,如果你在优化系统时删除了,那我只能说:对不起,让你白看了这么多!
10月17日,在FAT32 、WinXP SP1下测试通过。
如果是NTFS格式的,可以用DOS for NTFS试试(98安装盘里有)
2000 SP4也应该没问题,大家自己可以试试
这里可能有一个问题,如果有人先把SAM文件保存到别的地方,用完你的电脑后再放回来,就很难发觉!
原帖:XP丢失密码又一招
使用WinPE+ERD启动光盘破解administrator密码详解
win2000忘记管理员密码时的综合解决方案
win2000忘记管理员密码时的综合解决方案
[禁此抽烟] 于 2003-11-24 15:40:04上贴
--------------------------------------------------------------------------------
win2000忘记管理员密码时的综合解决方案
第一招
O&O Bluecon 2000是一款德国人开发的工具软件,它可以让你方便的修复被损坏的Windows NT/2000系统,与Windows 2000的恢复控制台差不多,唯一不同的是它不需要你输入密码就能够进入系统.这款工具最常用的功能可能就是修改本地管理员的密码了.
使用O&O Bluecon 2000修改本地管理员密码的步骤如下:
一.制作工具盘.
(1)制作四张Windows2000安装启动盘,制作方法见本站的Winnt/2000重要软盘制作小全。
(2)启动O&O BlueCon 2000软件的"O&O BootWizard",修改我们刚才制作的安装软盘(只修改第1张和第4张),共分四步.
(3)第一步Select Boot Device询问你使用哪一种方式引导系统,是Floppy(即四张安装软盘)还是CD-ROM,我们在这儿选Floppy(4 disk required)这一项,按下一步;
(4)第二步Select Options询问我们是不是创建Windows2000安装启动盘,因为我们刚才就创建了,因此不选,按下一步;
(5)第三步Patch Disk 1和Patch Disk 4,会提示你依次插入第1张和第4张进行修改操作.按屏幕提示完成工具盘制作.
二.修改本地管理员密码
这款工具与我前一款介绍的修改管理员密码的工具相同,只能够修改SAM中的本地管理员密码.
在使用O&O修改本地管理员的密码前,先介绍一下O&O支持的命令,共28个,你可以在"A:\>"提示符下使用"?"或"help"命令查看.这28个命令中比较重要的有:
backup:备份注册表
device:显示某一操作系统的硬件配置情况
edlin:一个文本编辑工具
passwd:修改密码命令
reboot:重新启动机器命令
regedit:编辑注册表命令
service:显示/启动/禁止服务命令
scopy或scp:文件复制命令,可以复制文件的安全属性
user:显示某一操作系统的用户
vmap:显示当前卷的信息
这些命令的参数与详细用法可以使用"命令 /?"的方式获得.
具体的修改本地用户的操作如下:
(1)将第1张软盘插入软驱中,重新启动机器,以软盘引导系统,按屏幕提示依次插入这4张盘,走完安装界面,最后,系统会提示:
O&O Bluecon 2000 V2.0 Build 256 - English Keyboard
(c) 2000 O&O Software GmbH. Allright reserved.
A:\>
(2)使用Passwd命令对SAM数据库账号的密码进行修改,Passwd命令的用法如下:
Passwd []
Passwd命令中Password参数是可选的,如果你不输入该账号的密码,那么该账号的密码将被清空(不建议这样).
如果你要将管理员Administrator的密码修改为123456,就可以这样使用:
A:\>Passwd Administrator 123456
回车后如果你当前系统中存在多个操作系统,系统会提示你要修改哪个操作系统的管理员密码.类似提示如下:
Please choose a system to logon
1. "Microsoft Windows 2000 Server" /fastdetect
2. "Microsoft Windows XP Professional" /fastdetect
3. "Microsoft Windows 2000 Recovery Cortrol" /cmdcons
选择一个合适的要修改的操作系统,我们这儿选1,即要修改Windows2000 server的管理员密码.一会儿如果系统提示"Password was successfully changed"就表示管理中的密码修改成功.如果你的O&O软件不是完全版而只是未注册版,那系统会提示管理员的密码是只读的,不能够进行修改.
(3)从软驱出取出软盘,重新启动系统,进入目录恢复模式,我们就可以使用新的管理员密码进入系统了.
这款软件最新版的下载地址是 http://www.oosoft.com
第2招:输入法漏洞
一、使用文件类型编辑创建管理员用户
开机到登陆界面
1.调出输入法,如全拼->帮助->操作指南,跳出输入法指南帮助文件
2.右击"选项"按钮,选择"跳至url"
3.在跳至URL上添上"c:\",其它的也可.
4.帮助的右边会进入c:\
5.按帮助上的"选项"按钮.
6.选"internet"选项.会启动文件类型编辑框.
7.新建一个文件类型,如一个you文件类型,在跳出的文件后缀中添上"you".确定.
8.选中文件类型框中的"you"文件类型,点击下面的"高级按钮",会出现文件操作对话框.
9.新建一种文件操作,操作名任意写,如"ppp"
10.该操作执行的命令如下:
C:\WINNT\system32\cmd.exe /c net user aboutnt 123456 /add & C:\WINNT\system32\cmd.exe /c net localgroup administrators
aboutnt /add
完成后退出
11.将c:\的某个文件如"ppp.txt"改为"ppp.txt.you",然后双击打开这个文件.
12.通常这个文件是打不开的,系统运行一会便没有了提示,但这时我们已经将用户aboutnt加上了,权限是管理员.
13.返回,重新以aboutnt用户登录即可。
二、使用快捷方式创建管理员用户
1-4步与第一种同。
5.右击c:\下的任一文件或文件夹,如右击Winnt文件夹,创建它的快捷方式:"快捷方式 WINNT".
6.右击"快捷方式 WINNT"文件->"属性"->"快捷方式"标签,将目标修改为"c:\winnt\system32\net.exe user aboutnt 123456 /add",起始位置修改为"c:\winnt\system32".确定退出."快捷方式 WINNT"文件的图标会由一个文件夹变成一个dos窗口.
7.右击"快捷方式 WINNT",运行它,创建"aboutnt"用户
8.重复6步,将目标修改为"c:\winnt\system32\net.exe localgroup administrators
aboutnt /add",起始位置修改为"c:\winnt\system32".确定退出.
9.右击"快捷方式 WINNT",运行它,将"Aboutnt"用户加入了本地管理员组中.
10.删除"快捷方式 WINNT"文件,返回,以以aboutnt用户登录即可.
第3招:屏幕保护程序
屏幕保护程序有时作用是非常大的,使用它恢复被遗忘的管理员密码就是一个例子.
使用了屏幕保护程序的办法,大家都知道,通常(注意,并不绝对),如果系统启动出现登录邀请框后15分钟不登录,win2000会启动屏幕保护程序logon.scr,位于c:\winnt\system32下,一个win2000标志会满屏跑.
我这次就对这个logon.scr做了手脚,因为logon.scr是个可执行文件,于是我先将logon.scr改名为logon.zqs,然后将c:\winnt下的explorer.exe复制到c:\winnt\system32下,改名为logon.scr,这一步需要我们拆下硬盘到其它机器上去操作,当然有其它的方法也行.
重新启动机器,出现登录对话框后不登录,等待15分钟,屏幕保护程序启动,一个资源管理器出现了,目标定位在c:\下,下面的操作就简单了,使用输入洞的方法即可.不再详说.
第4招:启动/关机脚本
这第四种方法较之前面的第二,第三种方法,是最可行的一种,可能百发百中吧.请着重看启动脚本的最后一种应用.
深入浅出Win2000计算机启动/关机脚本
一.简介
Win2000计算机启动/关机脚本(startup/shutdown scripts)是Win2000的一个新特点.启动脚本是邀请用户登录之前运行的批文件,它的功能类似于Win9X和DOS中的自动执行批处理文件autoexec.bat;关机脚本是计算机关机之前运行的批文件.
与Win2000用户登录/注销脚本(logon/logoff scripts)相比,它们之间的主要区别是:计算机启动/关机脚本在计算机启动和关机时运行,脚本程序只运行一次,通常在启动脚本运行完毕后才出现邀请用户登录的对话框;用户登录/注销脚本在邀请用户登录的对话框出现后,用户登录系统或从系统注销时运行,运行次数由用户登录/注销的次数决定,每登录/注销系统一次,脚本程序就运行一次.
二.指派
在启用计算机启动/关机脚本前,必须进行指派.指派计算机启动/关机脚本需要通过组策略MMC(管理控制台)管理单元进行,具体的操作如下:
1.单击"开始"菜单->"运行",在打开框内输入"MMC",打开微软管理控制台(Microsoft Management Console,MMC).
2.单击"控制台"菜单->"添加/删除管理单元...",在跳出"添加/删除管理单元"对话框内单击"添加"按钮,添加独立管理单元.
3.在"添加独立管理单元"对话框的"可用的独立管理单元"列表内选择"组策略",按下面的"添加"按钮.
4.当系统询问使用哪一个组策略对象时,如果你要指派面向本地计算机,只在本地计算机执行的启动/关机脚本,请选择缺省的"本地计算机"组策略对象;如果你要指派面向Win2000域,在域内所有计算机上执行的启动/关机脚本,那请点击"选择组策略对象"对话框中的"浏览..."按钮,在"浏览组策略"对话框选定能应用到整个域中的组策略对象,这里以"Default Domain Policy"对象为例,它是Win2000域缺省的域策略对象(图一)(t1.gif).
5.完成后依次关闭各对话框回到管理控制台,现在管理控制台上就有了一个相应的组策略对象树(图二)(t2.gif).
6.在管理控制台左侧的控制台树窗格中,依次展开组策略对象->"计算机配置"->"Windows设置"->"脚本(启动/关闭)"节点,双击右侧详细资料窗格中的"启动"或"关机"项目就可以设置计算机启动或关机时使用的脚本了(图三)(t3.gif)(因Win2000计算机启动和关机脚本的设置方法相同,下面的操作均以启动脚本为例).
7.双击右侧详细资料窗格中的"启动"项目,在跳出的"启动属性"对话框中点击"添加"按钮,添加新的计算机启动脚本.
8.一个启动脚本条目包括两方面的内容:脚本名和脚本参数(图四)(t4.gif).如果脚本名不包含文件路径,比如图中的脚本文件名只是"scripta.vbs",系统会到缺省的计算机启动脚本路径下寻找这个脚本文件.脚本的参数是可选的,可填可不填,看实际情况而定,图中的开机脚本使用了运行参数"start".
9.本地计算机脚本的缺省路径通常是"%systemroot%\system32\GroupPolicy\Machine\Scripts",如"C:\winnt\system32\GroupPolicy\Machine\Scripts".应用到域的计算机脚本的缺省路径通常是""\\\sysvol\\Policies\\Machine\Scripts",如"\\MyDC1\sysvol\Mydom.com\Policies\{31B2F340-016D-11D2-832F-00C04FB873F9}\Machine\Scripts".启动脚本文件存放在"Startup"子文件夹中,关机脚本文件存放在"ShutDown"子文件夹中.
10.我们可以根据需要重复点击"启动属性"对话框中的"添加"按扭,为计算机添加多个启动脚本(图五)(t5.gif).
11.设置完毕,保存后退出组策略MMC管理单元.等组策略刷新后,这些脚本就会在计算机启动和关机时起作用.
三.深入
1.我们对计算机启动/关机脚本的设置数据被Win2000保存在了一个名为scripts.ini的隐藏配置文件中,这个文件位于"C:\WINNT\system32\GroupPolicy\Machine\Scripts"目录下,可以使用任一款文件编辑软件如记事本进行编辑.
scripts.ini文件内容通常包含两个数据段:[Startup]和[Shutdown],[Startup]数据段下是启动脚本配置,[Shutdown]数据段下是关机脚本配置.每个脚本条目被分成脚本名和脚本参数两部分存贮,脚本名保存在XCmdLine关键字下,参数保存在XParameters关键字下,这里的X表示从0开始的脚本序号,以区别多个脚本条目和标志各脚本条目的运行顺序.下面是一个简单的scripts.ini文件的例子:
[Startup]
0CmdLine=d:\start\ss.bat
0Parameters=
1CmdLine=scriptsa.vbs
1Parameters=start
[Shutdown]
0CmdLine=shut.vbs
0Parameters=
从例子中我们可以看出,共设置了两个计算机启动脚本:ss.bat和scripta.vbs.ss.bat位于d:\start目录下,没有使用参数;scriptsa.vbs位于缺省的启动脚本目录C:\WINNT\system32\GroupPolicy\Machine\Scripts\Startup下,使用了参数"start".两个脚本的执行顺序是先执行ss.bat后执行scriptsa.vbs.设置了一个关机脚本shut.vbs,没有使用参数,该脚本位于缺省的关机脚本目录C:\WINNT\system32\GroupPolicy\Machine\Scripts\Shutdown下.
2.启动/关机脚本的运行情况,包含是否同步运行、是否显示运行状态、最长等待时间等,都可以在组策略中进行微调.具体操作如下:
(1)-(5)步同第二部分指派操作中的1-5步;
(6)在管理控制台左侧的控制台树窗格中,依次展开组策略对象->"计算机配置"->"管理模板"->"登录"节点,右侧详细内容窗格中显示的内容有四项与启动/关机脚本有关(图六)(t6.gif):非同步运行启动脚本,显示启动脚本的运行状态,显示关机脚本的运行状态,组策略脚本的最长等待时间.
(7)非同步运行启动脚本
在默认情况(也就是没有配置的情况,下同)下,系统要等每个启动脚本运行完毕才运行下一个启动脚本.如果启用这个策略,系统则不会协调启动脚本的运行顺序,启动脚本可以同时运行.如果停用或不配置这个策略,每个启动脚本要在上一个脚本运行完毕后才能运行.建议不配置.
这个策略对应的注册表值是"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\policies\system\RunStartupScriptSync",这是一个REG_DWORD值,0表示启用,1表示禁用.
(8)显示启动/关机脚本的运行状态
在默认情况下,系统不显示启动脚本中的指令.如果启用这个策略,系统会在启动脚本运行时显示每个指令,指令将出现在命令窗口,或显示出人机交互界面。这个功能主要是为高级用户设计的.如果停用或不配置这个策略,指令则不会显示.建议不配置.
举个例子,假设你在启动脚本中有一条命令是"c:\winnt\explorer.exe c:\winnt",如果启用了这一策略允许显示启动脚本的运行状态,那么当计算机启动时,一个资源管理器窗口就会跳出来,桌面被打开,系统以system用户的身份交互登录到计算机上,这无异于那个著名的输入法漏洞!由此可以看出,打开启动/关机脚本的运行状态有时是非常危险的.
这两个组策略条目对应的注册表值分别是"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\policies\system\HideStartupScripts"和"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\policies\system\HideShutdownScripts",均为REG_DWORD值,0表示启用,1表示禁用.
(9)组策略脚本的最长等待时间
这个策略限制了由组策略完成运行登录、开始和关闭脚本所需的全部时间.如果当指定时间已超过但脚本尚未完成运行,系统会停止脚本处理并记录一个错误事件.在默认情况下,系统允许合并的脚本集运行600秒(10分钟).
要使用这个策略,在第二个框中键入从1到32000之间的数目以确定您希望系统等待脚本完成的时间,单位是秒.要让系统一直等到完成运行脚本为止,无论等待时间多久,请键入0(图七)(t7.gif).但不建议这样,如果你的脚本写的很差,那后果将难以想象!
如果其它系统任务必须等待脚本完成才能进行,这个间隔时间就非常关键.在默认的情况下,必须完成每一个启动脚本后才能运行下一个,您还可以使用"非同步运行启动脚本"策略让系统等到完成启动脚本后再出现邀请用户登录的对话框.间隔过长可延缓系统并使用户不方便,如果间隔太短,所需的任务无法完成系统会可能会过早就绪,导致出现问题.
这个组策略条目对应的注册表值是"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\policies\system\MaxGPOScriptWait",也是一个REG_DWORD值,它的值表示等待的时间,单位是秒.
四.应用
计算机启动/关机脚本的用途很多,下面举三个比较典型的例子:
1.计算机启动和关机时间审核
(1)编写一个能够记录时间的脚本LogTime.vbs,内容如下:
'================================================
dim ArgObj,str,strtmp
Set ArgObj = WScript.Arguments
If ArgObj.Count < 1 Then
strtmp="无参数操作!"
else
select case ArgObj.Item(0)
case "startup"
strtmp=" 服务器启动."
case "shutdown"
strtmp=" 服务器关闭."
case else
strtmp=" 未知操作!参数:"+ArgObj.Item(0)
end select
end if
set fso=CreateObject("Scripting.FileSystemObject")
set tmp=fso.opentextfile("d:\log\logtime.txt",8,true)
str="["+cstr(now())+"] "+strtmp+chr(13)+chr(10)
tmp.write str
tmp.close
set tmp=nothing
set fso=nothing
'=================================================
这个脚本有两个参数:startup和shutdown.当用作启动脚本时,使用"startup"参数;当用做关机脚本时,使用"shutdown"参数.另外,脚本中使用了FileSystemObject对象,使用该脚本前请确保这个对象已经存在于你的计算机上.
(2)按照前面的方法将脚本设置好.每次计算机启动或关机,这个脚本都会运行,并将计算机启动或关机的时间(实际上这个脚本运行时的时间,但两者应该相差无几)记录到一个文本文件中,例子中是"d:\log\logtime.txt",可以根据需要更改.
2.删除一些特殊的共享
在Win2000中,由于计算机管理、用户登录等方面的需要,系统会建立许多特殊的共享,如C$、D$、ADMIN$、IPC$、NETLOGON等,但这些共享并不是所有的计算机都必须的.使用"计算机管理"MMC或net share命令等禁止这些共享,只是一种治标不治本的方法,它们在计算机重新启动后会重新出现.基于安全等方面的考虑,我们有时希望将这些共享彻底删除.现在删除这类特殊共享的方法比较多,如编辑注册表,下面就再提供一种使用启动脚本删除这些特殊共享的方法.
(1)编写一个能删除特殊共享的批处理文件DelShare.bat,内容如下:
net share C$ /delete
net share D$ /delete
net share IPC$ /delete
net share NETLOGON /delete
(2)按照前面的方法将脚本设置为启动脚本,重新启动计算机.OK,一切都清净了.
3.恢复管理员密码或新建管理员账号
丢失管理员密码是件非常令人头疼的事情,但说不定什么时候就会碰到.在紧急情况下,如何恢复管理员密码乃至新建一个管理员账号,现在已经有许多成熟的技术,如经典的登录屏幕保护程序法、使用O&O软件等.实际上,使用启动脚本也是一个相当不错的选择.
(1)如果故障计算机使用FAT/FAT32文件系统,那可直接使用Win98引导盘引导.如果使用NTFS文件系统,可将故障计算机上的硬盘取下,以从盘模式挂接到其它的Win2000计算机上.下面的操作以后一种情况为准,假设现在故障计算机的system分区(通常是C在新的计算机上成为分区E:.
(2)编写一个能恢复管理员密码的批处理文件admin.bat,内容只需要一条"net user"命令即可.如下:
net user administrator 12345678
这儿我们假设当前的管理员是administrator,将它的密码恢复为"12345678".将文件admin.bat保存到"E:\winnt\system32\GroupPolicy\Machine\Scripts\Startup"下,也就是故障计算机原来的"C:\winnt\system32\GroupPolicy\Machine\Scripts\Startup"下.
(3)编写一个启动/关机脚本配置文件scripts.ini,这个文件名是固定的,不能改变.内容如下:
[Startup]
0CmdLine=admin.bat
0Parameters=
将文件scripts.ini保存到"E:\winnt\system32\GroupPolicy\Machine\Scripts"下,也就是故障计算机原来的"C:\winnt\system32\GroupPolicy\Machine\Scripts"下.
(4)将硬盘恢复为主盘,接回原来的计算机,重新启动,等待启动脚本运行.启动脚本运行结束管理员administrator的密码就被恢复为"12345678".
(5)如果要新建一个管理员账号,admin.bat文件的内容可以修改为:
net user admin 12345678 /add
net localgroup administrators admin /add
这样一个名为"admin",密码是"12345678"的管理员账号就建立了.
这个方法不仅可以恢复独立服务器上本地管理员密码,也可以恢复Win2000域中域管理员的密码.