IsaacZ 发表于 2009-6-19 09:59:56

开机脚本的应用

本帖最后由 IsaacZ 于 2009-6-19 10:05 编辑

转自:http://qzone.qq.com/blog/38362316-1242539150

开机脚本的定义:
其实开机脚本并没有一个很官方的定义,其实开机脚本也不是那么神秘,说白了就是开机运行一个批处理或者VBS脚本,来解决一些不需要重启就可以生效的问题,来实现一些不需要重启就可以生效的功能。个人感觉这么理解应该是没错误的。

开机脚本都能做什么:
根据它的定义,来解决一些不需要重启就可以生效的问题,来实现一些不需要重启就可以生效的功能。我们可以很容易的联想到,可以添加/删除/修改快捷方式,设置IE首页,更换壁纸,绑定ARP,添加/删除文件等等。总之一切不用重启,就可以搞定的问题,基本上开机脚本都可以做到。

上面的内容对于在网吧做技术的长老前辈们就属于是卖弄了,就当是个新手扫盲好了。ATM可以提款所有人都知道,可是ATM取款未必所有人都知道。所以扫盲工作好是要做的!下面说下稍微深入的问题。

开机脚本的添加/安装:
开机脚本的安装和添加有很多途径,很多方式,下面我简单说下常见的添加方式,以及优缺点。

1、将开机脚本文件放到“C:\Documents and Settings\用户名\「开始」菜单\程序\启动”目录内来实现开机启动。
这个方法是最简单的了,但是效能一般,放在启动文件夹启动如果是批处理文件会有黑框,尽管你可以用其他方式来隐藏黑框,但是还是有点麻烦。
优点:设置方法简单。
缺点:某些时候可能因为路径空格问题导致脚本执行异常。启动优先级很较低。

2、通过注册表开机项实现。
像其他开机软件一样,可以通过这两个注册表来实现开机运行。
优点:设置方法简单,把设置好的注册表导入下就OK了。
缺点:容易误操作被清理掉。个别情况执行会受限制。启动优先级中等。

3、通过组策略实现开机运行。
开始--运行--gpedit.msc--“本地计算机”策略--用户配置--Windows设置--脚本(登陆/注销)--右测点登陆,然后填入脚本路径。
http://www.clxp.net.cn/attachments/month_0904/f200948223713.gif

这种方法是我正在使用的,效果很好。
优点:设置方式隐蔽,不会出现上面两种方式的缺点,执行优先等级高。
缺点:至今尚未发现。

4、通过服务方式实现开机启动。
这个方法技术含量过高,操作较为麻烦,搞不好还可能被某些软件识别成病毒,所以就不做介绍了。

开机脚本的运行方式:
1、开机脚本直接执行远程路径的批处理或VBS,这种方式失败率过高,但是依然有人会有,我也非常不解,效果就是开机脚本路径为\\服务器名\共享路径\开机脚本.bat。因为开机时有段时间网络是不通的,这么设置基本没什么执行效果。

2、比上面稍微好一点,执行一个本地脚本,而脚本内容则是:call \\服务器名\共享路径\开机脚本.bat表面上看起来和上面的方法有差别,但是实际效果是一样的,失败率很高。

3、比上面两点再进步一点,先执行一个本地脚本,然后用PING方式延时启动远程脚本。内容大致为:ping 127.0.0.1 -n 5
call \\服务器名\共享路径\开机脚本.bat这种方式执行率有一定提升,但是执行效果仍然不是特别理想。

4、较强的方案,执行一个本地脚本,然后把服务器脚本复制到本地,然后再调用。内容大致为:ping 127.0.0.1 -n 5
copy \\服务器名\共享路径\开机脚本.bat E:\Autorun\ /y
call E:\Autorun\开机脚本.bat这种方案已经是比较成熟,也比较好用的方式了。但是执行成功率仍然是可圈可点,比如网卡延时情况,你不一定延时5秒就可以成功,有时可能延时更久。

5、个人认为最强的方案,执行一个本地脚本,然后复制远程服务器上的脚本到本地,测试指定的开机脚本文件是否存在,如果不存在则循环延时,直到检测到指定的开机脚本文件存在,然后直接调用执行。内容大致为::loop
ping 127.0.0.1 -n 3
copy "\\服务器名\共享路径\开机脚本.bat" "E:\Autorun\" /y
if not exist "E:\Autorun\开机脚本.bat" goto :loop
call "E:\Autorun\开机脚本.bat"这种方式除cmd.exe进程被人为关闭,脚本都会100%执行成功。所以推荐大家适用此种方式。

下面附上本人正在适用的本地开机脚本。Copy code to clipboard程序代码
@ECHO ON
::C:\Clentlog.dat是本地日志文件,如果脚本不能正常执行,可以在本日志中发现问题。
cd\&C:&del /q C:\Clientlog.dat
::这里是设置远程的共享服务器计算机名,将update改为你的共享服务器计算机名即可。
SET 文件服务器=\\update
::设置远程开机脚本的存放位置,可以随意修改,如果带空格路径不要忘记加英文标点的冒号。
SET 客户机目录=C:\windows
::写日志,记录本地脚本开始执行的时间。
@ECHO %date% %time% 本地任务Debug开始.>C:\Clientlog.dat
::这句通常是没人用到的,可以删除,功能就是不允许修改禁止CMD运行。
::东方网点记费软件开机某一时间会禁止运行CMD,所以加了这句,否则脚本执行成功率会打折。
@ECHO HKEY_CURRENT_USER\Software\Policies\Microsoft\Windows\System >"%客户机目录%\cacls.ini"
regini "%客户机目录%\cacls.ini" & del /q "%客户机目录%\cacls.ini"
::设置循环标志为loop
:loop
::用ping功能设置延时,大概ping通状态大概ping两次为1秒。
ping 127.0.0.1 -n 1
::写日志,记录脚本于当前时间延时一次完成。
@ECHO %date% %time% 延时1秒完成.>>C:\Clientlog.dat
::复制远程服务器的开机脚本到本地目录。并显示日志是否复制成功。
copy "%文件服务器%\bat$\icafe8.bat" "%客户机目录%" /y>>C:\Clientlog.dat
::判断远程服务器上的脚本是否成功复制到本地目录,如果不成功,重新执行ping延时和复制脚本到本地。
if errorlevel 1 goto loop
::上面判断远程开机脚本已经被复制到本地,那么开始调用刚复制过来的远程开机脚本。
call "%客户机目录%\icafe8.bat"OK,开机脚本本地调用部分就是这么多了,实际上我也只是抛砖引玉,很多东西大家都可以不拘一格的,不一定非要按照我说的方式来做。但是当你遇到问题时,可以过来看看,一起烟酒烟酒~ http://www.clxp.net.cn/images/smilies/142.gif

最后要说的就是有些人的疑问或者不懈。
因为目前市面上的网维软件都有开机脚本或开机命令功能,直接用他们的不就可以了吗?干嘛还这么麻烦自己添加?显摆你有技术?
其实并不是这样,何况我也没什么技术,其实细心一点的人就会发现,网维软件提供的开机脚本工作流程是先要网维软件自身启动成功,然后从服务器使用非共享方式复制到本地,然后再调用执行。
事项下,开机脚本就是在开机第一时间就运行,如果用网维软件的开机命令功能,如果开机命令再复杂一点,都不知道要执行到何年何月了,更头疼的问题就是,有时服务器修改了开机脚本,客户机还可能同步失败,所以我们还是要自己动手,因为没有任何一个网维软件可以做到系统登陆就完全启动,但是我们自己添加的开机脚本可以做到,这就是为什么我不建议适用网维软件的开机命令功能,而要自己手动去搞的原因!

翔云 发表于 2011-12-27 23:00:38

:victory:
页: [1]
查看完整版本: 开机脚本的应用