amp@java

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  99 随笔 :: 0 文章 :: 228 评论 :: 0 Trackbacks
这几天要在单位部署一个软件包,是msi形式的,据说可以通过“域推送”的形式安装,搜索了一下,发现需要在 组策略->软件设置->软件安装 里面添加放在共享目录里的软件包。但是我试过无论在“计算机配置”里面还是在“用户配置”里面添加那个软件包,无论是“发布”还是“指派”,都没办法自动安装,最多只是在“添加删除程序”里面的“添加新程序”出现那个软件包,还需要手动安装。
域控制器上按照部门划分了多个组织单位(OU),并把用户分配到各自的组织单位中,组策略就是在这些组织单位上面应用的。
昨天晚上看了一下“Windows2000资源大全”,里面有讲到这种软件安装方法。原来是要把计算机也划分到组织单位中,然后在那个组织单位的组策略的“计算机配置”里面设置那个软件包,当计算机启动后,进入“应用计算机设置”阶段,还没出现登录界面时,就会自动安装。之前对组策略的理解有问题,以为组策略只应用于用户,实际上是“用户配置”应用于用户,“计算机配置”应用于计算机,要对让每台计算机自动安装,而不是在用户登录之后安装,就必须在“计算机配置”里面设置,要把这个设置应用于所有计算机,就要把那些计算机划分到某个组织单位,然后对这个组织单位应用组策略。

之前尝试过用另外一种方法实现软件的自动安装,这种方法不仅仅适用于msi,还适用于所有安装文件。
利用Windows的WMI服务,可以对远程用户的注册表进行操作,在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce里面添加一个值为安装文件路径的字符串,就会在计算机启动并登录后执行该安装文件,执行完毕后会把这个键值删除,也就是只执行一次。
利用PsTools,可以对远程计算机进行重启操作,当计算机重启后,用户登录时,就会执行安装过程。如果不需要倒计时重启,还可以通过WMI服务进行重启操作,这样就可以完全通过Script来实现,并且能够记录操作的成功与否。
通过以下代码可以连接远程计算机:
Set objSWbemLocator = CreateObject("WbemScripting.SWbemLocator")
Set objWMIService = objSwbemLocator.ConnectServer(strComputer,"root\default",strUser,strPassword,"MS_409","ntlmdomain:")
其中strComputer是远程计算机名,strUser是域管理员帐号,strPassword是域管理员密码
得到objWMIService之后,就可以像对本机一样操作WMI,例如获取注册表操作类StdRegProv:
Set objStdRegProv = objWMIService.Get("StdRegProv")
关于远程注册表操作可以查看MSDN里的StdRegProv类说明。
通过Win32_OperatingSystem类可以实现对远程计算机的关机、重启等操作。
WMI是个强大的工具,在局域网中可以实现很多方便的管理操作。但是需要通过VBScript来实现,而VBScript的异常处理十分弱智;使用JScript的话,很多WMI类的操作又十分繁琐。
posted on 2008-06-14 16:12 amp@java 阅读(1078) 评论(0)  编辑  收藏

只有注册用户登录后才能发表评论。


网站导航: