首页 > 代码库 > 域部署下的脚本应用实践。
域部署下的脚本应用实践。
公司上个月需要部署 360企业版,替换原有的杀毒软件。
360官方随提供了域部署工具。该脚本控制器需要在域服务器一直开启。在两个部门测试的过程中发现,偶尔有一些电脑域登录后未能自动安装企业版。并且能安装企业版的电脑,也需要经过下载、验证、安装客户端,三个流程,过程有将近10分钟。
最后选择自己尝试编写域部署脚本。
备注:所谓域部署,可执行文件(本文使用.bat 批处理文件)置于域服务器的netlogon文件夹中,再在每个用户在域服务器上的“环境文件”栏目写上脚本名称,这样域用户每次域登录就会自动执行该脚本。
在编写并测试域脚本的过程中,发现:直接运行远程共享文件夹中的360企业版的离线安装包安装是最快的(约2分钟)。
离线安装包却并不具备 识别终端是否有安装360企业版的功能(趋势的安装程序会先识别用户有无安装趋势)。 所以我在 域脚本‘360e.bat‘中,加入了判断终端是否安装了360企业版的 判断语句--无论是xp还是win7的64位、32位都能识别。
脚本初型:
if exist ‘%systemdrive%\Program Pile\360\360safe\360EntClient‘ exit
if exist ‘%systemdrive%\Program Pile (x86)\360\360safe\360EntClient‘ exit
192.168.2.xxx\360ent\setup.exe
第一句的意思是,如果系统盘存在360EntClinet文件夹,则结束本脚本(32位win7和xp用);
第二句的意思是,如果系统盘存在360EntClinet文件夹,则结束本脚本(64位win7用);
最后一句是执行360离线安装包安装;
( 备注:‘%systemdrive%’为系统盘,若直接使用‘C:‘替代‘%systemdrive%’,则不能正确识别系统安装在D盘、E盘的系统。)
因为这个‘360EntClinet’是企业版有别于360个人版的文件夹,所以用此为判断参考点。
勉强克服了识别识别客户端是否安装了360企业版的困难。
第二个困难是域脚本偶尔失效的问题,由于权限问题,我只能修改放在主域服务器脚本里,辅助域服务器的修改,小组长基于安全考虑,暂不让我修改(已做好备份的前提下)。 这个问题卡了我很久,最终使用geresult /v命令证明终端域登录时有时是向辅助域服务器领取登陆脚本,小组长才让我把‘360.bat’部署到辅助域服务器,不再出现域脚本失效的情况。
最后一个问题,我是这上一周末想到的----对于已经把360个人版安装到其他盘(非系统盘)的终端(360企业版默认安装到C盘,或者安装到已经安装了360个人版的分区),系统盘永远不存在‘360EntClinet’文件夹。 这个文件夹将会出现在本来安装了360个人版的其他分区中。 如此一来,域脚本对于部分已经把360个人版安装到其他分区的终端失效,需要调整。
后来在网上查阅,我发现,可以用存在于注册表的软件信息判别是否有安装某个软件。
于是我查找注册表中360企业版的注册消息。经过对比,发觉xp、win7的32位和64位系统中,都存在 这个注册信息在此位置。
后来我把域部署脚本‘360.bat’修改成如下:
@reg query HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\|find /i "360EntClientSvc">nul 2>nul
@if %errorlevel%==0 exit
\\192.168.2.xxx\360ent\setup.exe
‘@’用于隐藏脚本信息,以免被员工看见,被加以破解。
‘%errorlevel%’为软件返回信号,0为前面的语句执行正确。
至此,360企业版的域部署才妥善完成,部署过程顺利完成。
(欢迎交流)
本文出自 “solution” 博客,请务必保留此出处http://zgysolution.blog.51cto.com/9605745/1577694
域部署下的脚本应用实践。