Windows: 远程自动安装程序

Windows: 远程自动安装程序

问题的提出

    作为一个技术支持人员,很有可能遇到这样的问题,你需要为一批计算机安装一个或多个软件更新,如果你有足够的权限和知识,可以使用组策略(Group Policy)来迫使每台机器在下一次启动的时候自动从网络的一个共享处下载安装这个更新,这对于一个小型的企业或者计算机不多的情况根本不是问题,如果 是需要马上更新,大不了电话通知所有人重新启动机器。当然了对于大型企业等,肯定都装有微软的SMS等类似的软件,它可以提供更强大和更灵活的方式来远程 安装/更新等操作,而且有很好的跟踪功能,这样可以确保所有计算机都可以被更新。但是有时现实世界似乎并不那么顺利,比如可能你没有SMS类似的软件,或 者你根本没有足够的权限,而通过与系统管理员沟通,他们可能基于各种原因无法满足你的要求;或者受限于网络速度,这些计算机同时进行更新,可能造成网络拥 堵影响所有人的网络速度;或者可能这些计算机根本不是网络管理的,没有加入到一个AD/NT域等等各种原因,都有可能使你只好手动地,挨个操作每台机器: 告诉用户需要暂停工作,登录到管理员,安装,等待,必要的测试,登出,告诉用户可以工作了,当然了你可以使用远程管理软件实现上面的操作,但是依然要每台 机器地依次操作,人为等待也是必不可少的。这样的事情,如果是几台机器,还可以接受,如果是几十上百台,一是浪费时间,二是手动容易出错。

如果要是可以实现以下操作不是挺好:
    在一台管理机器上远程发布软件运行命令到一台目标机器,这个命令发出后,它在该机器上自动运行直到结束,而无须管理人员的进一步干预,然后无须等待它的结 束,可以重复发布本操作到所有目标机器,当命令发布工作完成之后,就可以做别的工作了,估计安装都已经完毕,可以查看一下记录文件,看看是否有操作失败的 机器,如果有,重新尝试或者人工干预。这样不是既快捷又可以保证更新完成?

前提和准备

    要想实现这样的快捷操作,要有以下几个前提:
1. 你要找到一个可以自动运行在silent/quiet安静模式下的安装包,这一点很重要。如果安装包是.msi的,那么Windows自带的安装程序就可 以支持/slient选项;有好多setup.exe的安装程序,也支持/quiet的不需要人工干预的安装选项。如果没有,你可以自己制作一个.msi 安装包,或者学习一下. 这是一个基本要求,因为无论你使用上述的何种自动安装方法,这样一个安装包都是前提条件。

2. 你要有一个Network Share,即便是没有服务器,一个Windows工作站也可以简单实现支持同时10个并发连接的网络共享.

3. 你要确保你有一个具有在目标机器上是管理员权限的帐户可用。

4. 你要有一点编辑制作Windows batch的知识.

5. 找到合适的程序,这个程序是微软官方的免费软件,是一个命令行程序,叫psexec.exe,它包含在PsTools包之内,你可以在这里下载,或者这里查看相关说明。

操作步骤实现

    好了,我们下来就一步一步地实现这个操作。
    首先明确几个感念:
目标机:就是需要程序运行安装的计算机。
管理机:也就是管理员操作的机器,管理员从这台机器发布命令到所有需要的目标机。
    再说明一下,为了方便说明问题,假定上面说的那个程序psexec.exe存放在c:/目录下。

  1. 配置网络共享:
    这一点不用细述了,网上好多资料可以使用.
    为 了后面方便起见,我们假设服务器名是Server1, 共享名是Software, 而程序放置在目录Applications里面, 比如是安装Adobe Acrobat Reader 9.1的更新,我们把这个更新程序放在AdobeAcrobatReader子目录中,更新程序叫做AAR_Update91.exe.
    这样安装程序的路径应该是://Server1/Software/Applications/AdobeAcrobatReader/AAR_Update91.exe
    注意,上面的第三条中的那个具有管理员权限的帐户,一定要同时具有至少对Applications目录的写权限,因为我们要把运行情况记录写在这里。
  2. 把下面的批处理文件保存在管理机上,比如说叫做C:/runupdate.bat:
    @echo off
    net use x: //Server1/Software/Applications/
    x:

    REM “Replace your codes starts from here”
    cd “AdobeAcrobatReader”
    AAR_UPDATE91.exe /sp- /silent /norestart
    REM “replace your codes end of here.”
    if %ERRORLEVEL% NEQ 0 goto failed
    echo "Adobe Acrobat Reader updated DONE!"

    cd ..
    echo %computername% %date% %time% >> ComputerList.txt
    echo "Updating of Acrobat Reader succeeded. "
    goto end

    :faile
    echo $%computername% %date% %time% >> ComputerList.txt
    echo "Updating of Acrobat Reader failed. "

    :end
    c:
    net use x: /delete
  3. 这是关键的一步了,比如准备在目标机w001上运行安装程序,那么在管理机上进入Command Prompt, 然后输入下面的命令:
    c:/psexec.exe //w001 -u -p -x –c –w c:/ c:/runupdate.bat
    其中, 把替换成上面提到的那个具有目标机上管理权限的用户,是那个用户的密码,如果你省略密码,程序在运行时会询问你,来输入隐藏方式的密码。
  4. 上面的程序会很快地结束运行,并提示一个PID给你,记住这个PID,以后测试跟踪可能用得上。然后,你就可以继续运行上面的命令,只不过是把机器名换一下,让下一台机器运行。


    上面就是全部的过程和步骤。不过,你只是照搬上面的批处理文件很可能不能有效运行在你的环境中。前面说过,你要懂得一些批处理程序的编写。大家仔细看看上 面的批处理文件. 第2行的命令是将共享目录映射到本地的一个盘符,那里用到的是x:, 在你的环境中x:很有可能被用了,所以要找到一个在你的环境中没有用到的空闲的盘符.

    至于跟踪程序运行结果,只要打开//Server1/Software/Applications/ComputerList.txt文件,那里是所有运 行了安装程序的机器的列表,其中计算机名前面带有$字符的是没有安装成功的,那么这些计算机需要你特殊照顾了,要不选定其它时间再次运行,要不选择手动安 装。无论如何,对于一个配置和管理良好的环境,应该来说会有很少的机会遇到自动安装失败的情况。当然了,会有其它情况造成安装失败。

问题和解决

    在一个良好管理的企业环境中,确保同一个环境中的所有计算机都是基于同一个系统镜象,这是保证这个操作能够最大可能地成功运行,否则,这才是管理员的恶 梦。至于如何制作Windows系统的镜象,可以参考微软的官方文档和我的blog中关于Windows系统部署的文章 (http://blog.csdn.net/afatgoat).

    其次,测试非常重要的步骤,当你制作或者得到一个现成的安装程序后,一定要在自己的环境中测试,选择目标机来在手动操作情况下是否能成功,是否有警告,安装完成后,是否达到了预期的目标,有没有遗漏等,比如要卸载的旧版本是不是成功卸载等等。

    要使上面的自动安装过程顺利完成,最主要的技术问题就是,要保证安装过程不需要人工干预,否则,它会等待用户输入确认信息,而上面的运行方式是没有人机界面的程序运行方式,所以,Windows不会显示询问用户确认窗口, 最终导致安装不能成功.

    如果希望监视或者测试,你可能希望通过上面提到的PID来获得程序运行的信息,在XP中最基本的命令是tasklist了,在Vista中可以看到PID。

参考:
http://technet.microsoft.com/en-us/sysinternals/bb897553.aspx

你可能感兴趣的:(Windows系统部署)