用组策略大批量无感安装软件,如ipguard客户端、glpi客户端
用组策略大批量无感安装软件,如ipguard客户端、glpi客户端

阅读原文
建议阅读原文,始终查看最新文档版本,获得最佳阅读体验:《用组策略大批量无感安装软件,如ipguard客户端、glpi客户端》
https://docs.dingtalk.com/i/nodes/QBnd5ExVEvdl6EdPu7X4b6k5JyeZqMmz
引言
在企业环境,有时会要求向企业中所有电脑安装软件,要达到这个目的,有多种方法,比较简单的方法是利用sccm之类的终端管理软件推送,但是很多企业是没有部署这类软件的,然而很多企业都部署了活动目录域服务,通过组策略也是可以实现的。本文会演示如何通过组策略大批量无感安装ipguard客户端和glpi客户端。
在企业应用GLPI,通常都需要给所有PC安装glpi agent,批量安装客户端有很多办法,本文采用两种办法实现批量安装glpi客户端,一个是利用组策略中的软件安装功能批量安装glpi agent,这个方法的优点是操作简单,便于升级和批量卸载;另外一个是利用组策略中的即时任务计划功能,这个方法的优点是电脑不需要重启就能执行自定义任务,还有用户没有本地管理员权限也没有影响,而且任务只执行一次,不重复执行(也可以设置任务计划重复执行)。
方法一的难点在于组策略中的软件安装功能,并不能添加参数,然而安装agent至少需要指定server参数,我的办法是用Advanced installer软件修改msi包,指定server参数的默认值,这样新的msi包就可以直接用来部署了。方法二就很灵活,可以用powershell脚本,因而可以指定参数,还能很方便指定安装包源文件的位置,比如可以指定http协议,而方法一只能用smb/CIFS协议。
关于升级安装的说明
如果一台电脑已经安装了glpi agent,并且连接到glpi服务器上,直接升级安装glpi agent并且指定另外一个glpi服务器是可行的,不会有问题。
如何利用组策略批量安装glpi客户端
方法一:启动脚本
修改msi包
修改msi包的软件有很多,例如微软开发的免费软件orca,本文使用的是Advanced installer,这是一款非常强大的程序包创建工具,也可以直观地修改msi包,例如更改默认安装目录,更改属性值等等。
Advanced installer安装就不介绍了,直接讲述如何修改msi包,本文以修改1.4版本的安装包为例,官方下载的安装包文件名为:GLPI-Agent-1.4-x64.msi
打开Advanced installer软件,然后单击“文件”--open,再选择需要修改的msi安装包,打开后就可以进行各种更改了,本文修改的项有:
设置参数server和runnow的值,这两个参数默认值分别是empty和0;server参数指定glpi服务器的地址,runnow参数设置为1表示安装完glpi agent后立即开始资产盘点并将资产信息发给glpi服务器端。
默认情况下,安装包只添加"feat_DEPLOY,feat_COLLECT"这两个功能(注意feat_AGENT默认也是添加的,这是最基础的功能),我改为添加所有功能,也就是以下5个功能都添加:
feat_AGENT: to restrict to the minimum installation with agent and Inventory task
feat_NETINV: to select NetDiscovery and NetInventory tasks for installation
feat_DEPLOY: to select Deploy task for installation
feat_COLLECT: to select Collect task for installation
feat_WOL: to select WakeOnLan task for installation
具体修改方法如下图


接下来说明如何更改msi包,使得默认添加所有功能,这个修改并不在properties页面,而是在table editor页面,下图红框中选中的feature的level值默认并不是3,改为3就意味着默认安装此项功能,如果仔细分析,会发现原始msi包中,默认安装的功能的level值为3,所以可以推导出level值为3则表示默认安装此项功能。(有些包不仅要修改level值,还需要修改attribute值)
关于这个feature,具体可以参考这篇文章功能表 - Win32 apps | Microsoft Learn

更改完成后,单击“文件”--“Save as”另存为一个msi包,这样可以不用覆盖原始msi包,我命名为GLPI-Agent-1.4-x64._myseV1.1.msi
GPO安装软件
GPO有个功能是软件安装,可以方便大规模安装软件,只是这个程序包的格式必须为msi,而且不能添加参数,在应用时,默认会静默安装,无需额外处理。本文使用的是计算机配置而非用户配置,这意味着程序包会强制安装(分配软件而非发布软件),无需用户点击。操作步骤为;
首先需要新建一个共享文件夹,将之前导出的msi包放到此共享文件夹下,还需要设置权限,确保需要应用组策略的计算机和用户有权限读取,接下来创建一个GPO ,按照下图所示创建一个数据包

GPO编辑完成后,就可以链接此GPO了,计算机应用组策略后,下一次开机时会自动安装glpi agent

特别说明
用上述方式大规模安装软件,有个前提条件,就是客户端计算机在启动时必须要能连接上局域网或者说能访问域控制器,很多企业笔记本电脑连接无线网络都会采用radius认证,一般用的是802.1X协议,这是根据域账户认证的,所以这些笔记本电脑开启时肯定没有连接上无线网络,因此也无法成功应用组策略,对于这种情况,可以考虑用注销脚本安装软件或者用组策略添加一个任务计划。
方法二:即时任务
在开始前,方法一中的修改msi包已完成,还要将这个msi包放到一台web服务器中,当然也可以是文件服务器,本文采用的是web服务器,建议用web服务器,因为不需要认证,更方便。
此方法的本质是推送一个即时任务给加入域的计算机,这个任务其实就是执行了一串powershell命令。
注意,这种方式其实可以不用修改原始的msi包,直接添加安装参数即可,如下,这种方式更简单,需要注意的是,安装参数必须要分别用引号分隔,否则Powershell会认为是start-process的参数而不是msi的参数
C:\WINDOWS\system32\WindowsPowerShell\v1.0\powershell.exe -ExecutionPolicy Bypass -WindowStyle Hidden -command "& {$var = join-Path $env:TEMP \GLPI-Agent-1.12-x64.msi;Start-BitsTransfer http://ITR.dltornado2.com/GLPI-Agent-1.12-x64.msi $var;Start-Process -FilePath $var -wait -ArgumentList '/quiet','SERVER=https://glpi.dltornado2.com:10443/','RUNNOW=1';Remove-Item $var}"

技巧--如何单击确定按钮
我们在编辑计划任务时,会发现最下面的按钮不显示,正常应该是如下图所示样式的,那么如何点击确定呢?也简单,就是利用tab键即可。

创建组策略对象
如下图所示:


上图中的参数为:
-ExecutionPolicy Bypass -WindowStyle Hidden -command "& {$var=Join-Path $env:TEMP \GLPI-Agent-1.4-x64._myseV1.1.msi;Start-BitsTransfer http://ITR.dltornado2.com/GLPI-Agent-1.4-x64._myseV1.1.msi $var;Invoke-CimMethod -ClassName Win32_Product -MethodName Install -Arguments @{PackageLocation=$var};Remove-Item $var}"


下图设置项目级目标,指的是此即时任务在满足何种条件下才应用,从下图可知,应用即时任务的条件是目标计算机没有安装glpi agent V1.4

验证
找一台加入域的计算机,刷新策略后,正常情况下,即时任务立即执行,下图是目标计算机任务执行状态:
注意若未看到,可能是没有显示隐藏的任务,在查看中可以勾选“显示隐藏的任务”

从目标计算机的事件查看器中可以查看所有powershell运行的脚本(事件ID是403),从下图可知确实运行了组策略中指定的powershell命令


通过命令行安装glpi agent
参考资料:Windows installer — GLPI Agent 1.8 documentation
直接执行:
#格式如下
$glpi_msi_path /quiet SERVER=https://glpi.dltornado2.com:10443/
#示例
D:\tornadofiles\software_常用软件\server_服务器端\GLPI> .\GLPI-Agent-1.12-x64.msi /quiet SERVER=https://glpi.dltornado2.com:10443/
用start-process
这种方式的优点是可以添加安装参数
Start-Process -FilePath $glpi_msi_path -ArgumentList "/quiet SERVER=https://glpi.dltornado2.com:10443/"
如果想在完整完成glpi agent后立即启动,可以加上参数RUNNOW=1
Start-Process -FilePath $glpi_msi_path -ArgumentList "/quiet SERVER=https://glpi.dltornado2.com:10443/ RUNNOW=1"
用Invoke-CimMethod
这种方式默认就是静默安装的,不需要额外指定静默安装参数,但是这种方式不支持添加额外安装参数,比如无法通过这种方式设置glpi server url,所以我是实现修改了官方的msi包,直接将server url写入包中
Invoke-CimMethod -ClassName Win32_Product -MethodName Install -Arguments @{PackageLocation="d:\GLPI-Agent-1.4-x64._myseV1.1.msi"}
msiexec
也是静默安装的
msiexec /i GLPI-Agent-1.12-x64.msi /quiet SERVER=https://glpi.dltornado2.com:10443/
winget
参考资料:Installation — GLPI Agent 1.8 documentation
winget install glpi-agent --custom="SERVER='https://glpi.dltornado2.com:10443/' RUNNOW=1"
如何利用组策略批量安装ipguard客户端
有两种方法,常见的做法是直接利用组策略的软件安装功能,但这种方式是应用于计算机账户的,如果活动目录中没有对计算机账户进行分组,则比较困难。

我的做法是将组策略应用于用户账户,不使用组策略中内置的软件安装功能,而是使用计划任务,如此我们便可以自定义命令,安装任何软件,这一点,在上一节介绍批量安装glpi客户端时也有说明,方法其实是一样的。下面是我使用的组策略。
简要对我使用的组策略进行说明,从下面三张截图可以看出,我是将ipguard客户端的安装包放到了一个web网站上的,然后通过链接下载到企业中的PC上,然后直接运行。我还通过注册表来判断PC上是否已经安装了ipguard客户端,如果已经安装了,则不会重复安装。
我将组策略对象链接到了需要安装ipguard客户端的用户所属的OU,如此便可以根据用户所属的OU决定哪些PC需要安装ipguard客户端了。而不用考虑计算机账户分组的问题了,十分方便。



参考资料
使用组策略远程安装软件 - Windows Server | Microsoft Learn
如何使用 Windows 应用程序管理调试日志记录对软件安装进行故障排除 - Windows Server | Microsoft Learn
MSI Quick-Edit mode (advancedinstaller.com)
使用Orac修改.msi安装包以适应自动化部署的需要_msi 修改_jiaojiaodubai的博客-CSDN博客
关于作者和DreamAI
关注微信公众号“AI发烧友”,获取更多IT开发运维实用工具与技巧,还有很多AI技术文档!

本文介绍通过组策略批量无感安装ipguard和glpi客户端的方法,包括修改msi包、利用软件安装功能和即时任务计划,还提及命令行安装方式及相关注意事项与参考资料。
浙公网安备 33010602011771号