欢迎来到公海710 使用 Ivanti Environment Manager 和 Chocolatey 进行简单的软件管理
什么是巧克力?
Chocolatey 是适用于 Windows 的 PowerShell 驱动的软件包管理器。本质上,它是一个本地代理和远程库(存储库),可用于在 Windows 机器上部署和管理软件安装(包)。它具有依赖性和冲突处理功能,以及对软件安装的多个(公共和私有)存储库的支持。出于我们的目的,我们不会太担心设置存储库和创建包,而是使用公共存储库和包。
这是给谁、在哪里用的?
这绝不是适合大型组织的功能齐全的软件管理解决方案。该解决方案最适合需要在最少数量的计算机上管理基础软件集的实验室、小型组织或团队。由于软件包实时安装到计算机中,因此这是持久性 VDI 或物理设备的解决方案,而不是预配置或非持久性 VDI。
这里使用 Ivanti 环境管理器 (EM) 策略完成的所有操作也可以使用其他产品完成,因为其中大部分都是脚本驱动的。我喜欢使用 Ivanti(以前称为 AppSense)环境管理器策略平台,因为它是一种可视化脚本语言,用于在用户环境中自动执行活动。它可用于从基本驱动器和打印机映射到复杂的条件 GPO 应用程序以及本例中的脚本执行的所有用途。
我们要做什么
在本次练习结束时,我们应该制定一个 EM 政策和实践,允许根据用户 AD 组成员资格从 Chocolatey 公共存储库动态安装软件包。如果您愿意的话,这是一个非常简化的 SCCM 作业系统。
先决条件
我们将假设有一个健康的 EM 政策环境,并且了解 EM 和 Active Directory (AD) 管理。虽然主要是剪切和粘贴,但对 PowerShell 和 VBscript 的良好掌握也将有所帮助。
包和组
首先,环顾四周https://chocolatey.org/packages。这是 Chocolatey 包的公共存储库。您会在这里找到大多数主流软件以及大量免费开源软件 (FOSS) 来填补空白。
出于我们的目的,我们将使用 AD 组,其名称与我们要安装的 Choco 软件包的名称相匹配,并加上一个定义标头。
对于标题,我们将使用“ASCHOCO_”适用于 AppSense Chocolatey。这样,这些组就很容易跟踪,并且为我们提供了一个在 PowerShell 中可以轻松过滤的字符串项。
以 7Zip 为例,我们可以看到它的包名称是“7zip”。但是,还有一个名为“7zip.install”的软件包可用。无需详细介绍为什么 在这里,您通常需要使用可用的软件包的 .install 版本。我们将继续使用我们的标头标准为此创建一个组:“ASCHOCO_7zip.install”
EM 政策
在深入了解 Chocolatey 乐趣的具体细节之前,需要解决 EM 中的一些限制。本质上,EM 无法在 USER 和 SYSTEM 执行环境之间传递信息。例如,如果您将某个操作提升为以 SYSTEM 身份运行,则尝试引用%USERNAME% 变量,它会不是 返回用户名,而不是 SYSTEM。
这会带来一个问题,因为 Chocolatey 需要以管理员身份运行,而且还需要访问一些特定于用户的信息。我们当然可以使用 Ivanti 的应用程序控制解决方案来完成一些海拔工作,但正如他们所说:那是另一场表演。
为了仅通过 EM 解决用户/系统划分问题,该政策利用了暂存目录 (C:appsense_stage)。该暂存目录是在计算机启动时创建的(因此作为 SYSTEM),使用户可写(使用 icacls),然后用作用户可以在其中写入的沙箱到 并且系统可以读取来自.

稍后,政策将使用此目录来存储需要为用户安装的应用列表。
这里还有一个 PowerShell 操作来创建新的日志源供我们以后使用。
我们已在下面附上可供下载的完整框架,但其实质内容实际上可归结为四个步骤:创建暂存环境、安装 Chocolatey 平台、解析当前用户的组成员身份,以及安装与这些组关联的软件包。
安装 Chocolatey
Choco 基本安装通过三行 PowerShell 进行。本质上,这会安装巧克力底座,使其安静下来,并写入事件日志。在 EM 策略中,此 Powershell 脚本包含在一些条件逻辑中并在 Pre-Desktop 上运行;

我们有一张支票来确保 Choco 是不是 已安装,然后为用户设置登录消息并运行 PowerShell 来执行安装。这里还有一个额外的操作,通过简单的自定义操作安装 Chocolatey GUI 包。
解析用户组

在这个阶段的政策中,有一个 vbscript 看起来相当丑陋,但实际上完成了一个非常简单的任务:读取当前用户的 AD 组,选择以 ASCHOCO_ 开头的组,然后将包名称加载到 C:appsense_stageapplist.txt 中的文本文件中
现在用户已经将 Choco 包的列表存储在系统可以访问的位置,是时候运行我们系列中的第三个脚本了。

它在 Desktop Created 上运行,以消除对登录时间的任何影响,但它当然可以移动以适应用例。
此脚本中发生了很多事情,但它基本上只是解析之前创建的文本文件,然后将该软件包列表与当前安装的 choco 软件包列表进行比较。如果它发现已分配的未安装的软件包,它将安装它们,如果它发现已安装的未分配的软件包,它将卸载它们。
请记住,此处的安装/卸载功能假定通过 Chocolatey 进行管理 - 它不会检查计算机已安装的软件清单。
测试!
在测试时没有太多可看的。登录后,所有指定的东西都应该正确安装,而所有不正确的东西——不应该!包管理脚本的一部分创建了一些事件日志通知,以便我们可以使用这些通知进行验证:

在此测试机器上,我们可以看到两个卸载事件 (ID 4002) 和一个安装事件 (4003)。对于此测试来说这是正确的,其中安装了两个不应该安装的 choco 软件包,并且已分配但缺少一个软件包;

总结
这是一个(相当)简单的示例,说明 EM Policy 平台如何利用 Chocolatey 等 FOSS 工具来真正扩展产品的功能和能力。
不过,您可能已经注意到,我们缺少一些附加功能。具体来说,没有针对已安装的_upgrading_packages 的机制。此外,我们没有介绍私有存储库的创建,也没有介绍自定义包的构建。
好消息!在以后的文章中,我们将通过在本地创建自己的私有 Chocolatey 存储库、使用自定义构建的应用程序包填充它并扩展脚本功能来处理包升级来扩展此解决方案的功能。
下次再见!
作者