以编程方式或通过脚本“接触”软件部署组策略

Nic*_*cki 5 deployment windows-installer group-policy

我有一个使用 Windows Installer 的内部应用程序。此应用程序的每次更新都是一次“重大升级”(不同的产品代码,相同的升级代码),它调用 RemoveExistingProducts。(实际上,这意味着每次创建新版本时,您只需单击 MSI 文件即可安装它,因为它会卸载旧版本,然后安装新版本。)

它目前通过组策略中的机器配置进行部署。任何链接的 GPO 都将在下次启动时安装该软件,这非常有效。

我还有一个持续集成服务器 (TeamCity),每次我们向源代码控制提交一些内容并“固定”以进行部署时,它都会为这个软件构建和运行测试。我什至可以将新构建的 MSI 文件复制到网络共享以准备部署。

不幸的是,作为集成过程的一部分,我没有看到实际告诉 GPO 以编程方式重新部署新更新的 MSI 文件的方法。

如果我只是覆盖现有的 MSI 文件并且不接触 GPO,那么安装了旧 MSI 的机器不会注意到这种变化,而较新的机器在找不到包含产品代码的 MSI 文件时会吓坏组策略管理编辑器生成的脚本。不错,有道理

如果我只是覆盖现有的 MSI 文件并在 GPME 中单击“重新部署应用程序”,似乎会发生相同的行为。同样,我们似乎不高兴我们试图重新部署一个 MSI 文件,该文件的包代码与 GPME 生成的脚本中的代码不匹配。不错,有道理

什么的工作是右键单击在GPME安装包,打“立即删除”,然后将安装包右后卫-创建一个新的* .aas脚本和老包被删除,并在下次安装新的软件包引导。有没有办法通过批处理脚本来做到这一点,我可以将它添加到我的集成服务器的构建过程中?

谢谢!

后续更新

在查看了 Evan 的评论后,我最终只编写了一个在 Startup 上运行的小批量脚本。我还编写了一个名为msicheck确定是否安装了给定 MSI 包的小实用程序。这很好地满足了我的需求,比翻阅 LDAP 规范的页面要好得多!=)

Eva*_*son 5

我曾有过做类似事情的愿望,并且过去曾对这个主题进行过一些研究。

我无法找到任何公开的 API 来执行组策略编辑器正在执行的操作来创建这些应用程序广告脚本 (.aas) 文件和 AD 中的相应记录。PowerShell 组策略 API 允许您配置基于注册表的设置,但不能配置其他组策略扩展的设置。

现在有一个对组策略软件安装协议扩展的引用(感谢欧盟反垄断和解!),我想您可以尝试滚动引擎来自己执行任务。执行添加包所需的 LDAP 事务和 .aas 文件的格式都在那里。看起来有点吓人(虽然很有趣)...

坦率地说,您对细节的关注是值得称赞的。我希望你正在编写我的客户使用的软件。您单独使用 Windows Installer 这一事实使您处于领先地位。您了解组策略软件部署并实际测试它让我头晕目眩!我希望一些可衡量的开发人员像您一样关心。