应用程序分发程序包操作和检测规则
程序包操作定义了应用程序分发部署程序包的方式。 程序包检测规则可帮助应用程序分发决定是否应将应用程序部署到设备。
程序包操作
在应用程序分发 > 应用程序目录中配置程序包操作。 添加或编辑应用程序,然后选择程序包选项卡。 将要使用的操作拖放到生成器树中。 在生成器树中选择操作以对其进行配置。
可用的程序包操作包括:
这些规则可以帮助确定应用程序是否已安装,如果已安装则不应再次安装。
重要提示:如果任何检测步骤解析为 true,程序包处理将停止,并且设备的应用程序状态将显示为合规。
有关可用检测规则的更多信息,请参阅本主题中后面的程序包检测规则。
:将文件下载至 Ivanti 应用程序分发默认工作路径:
C:\Program Data\Ivanti\Ivanti Cloud Agent\Agent\SWD\working
除非您另有指定,否则任何接受文件路径的操作都将采用此路径。 每个程序包运行之前和之后都会清除此文件夹。
可以在此处指定多个文件,并且可以根据需要配置多个下载文件操作。 文件可以托管在任何 HTTP(S) 位置,前提是该位置不需要身份验证且要部署的客户端可以访问该位置。
您可以在来源 URL 字段中输入或粘贴 URL。 您提供的 URL 必须直接链接到要下载的文件。 从 URL 检测到的文件名将显示在选择文件按钮旁边。
如果需要,请使用添加新文件按钮添加其他下载文件 URL。 如果您的文件存储在 Microsoft Azure Blob 存储或 Amazon Web Services 存储桶中,请使用选择文件按钮打开云文件资源管理器。
云文件资源管理器
使用选择文件按钮可打开云文件资源管理器,您可以在其中从组织的 Microsoft Azure Blob 存储或 Amazon Web Services 存储桶选择文件。 Ivanti Neurons 不包含 Azure 和 Amazon 存储账户。
- 有关如何在 Azure 中创建存储容器的信息,请参阅这篇 Microsoft 文章。
- 有关如何在 Amazon S3 中创建存储桶的信息,请参阅这篇 Amazon 文章。
在使用云文件资源管理器之前,必须先在管理员 > 凭据中添加您的 Azure Blob 存储或 Amazon S3 凭据。 有关更多信息,请参阅凭据。 对于 Azure,我们建议您在 Ivanti Neurons 中为 Azure key1 和 Azure key2 创建凭据,以实现 Azure 密钥轮换。 随后,您可以在云文件资源管理器中选择所需的账户。
这些凭据用于填充文件夹和文件列表,让下载文件操作可以获取您所选文件的“共享访问签名 URL”(Microsoft Azure) 或“预签名 URL”(Amazon Web Services)。 客户端不会使用这些凭据。
添加凭据后,您便可以在云文件资源管理器中选择您的云存储账户和容器或存储桶。 容器浏览器将显示存储在其中的文件和文件夹。 通过选中文件旁的复选框并选择添加按钮来添加一个或多个文件。 您添加的文件的 URL 随后会显示在下载文件操作属性中。
云存储提供商要求生成的 URL 令牌具备有效期。 应用程序分发将令牌的有效期设置为七天,并且每五天更新一次令牌,以防止目标客户端失去访问权限。
按前缀筛选文本框中的云文件筛选功能仅限 Microsoft API 和 Amazon S3 API。 筛选器仅限于您选择的文件夹,不包括子文件夹。 您输入的筛选器文本必须与文件名完全匹配(区分大小写),并且以所需文件名的第一个字符开头。 您不必输入完整的文件名,只需包含首字母即可。
选择删除将删除所选的对象(文件或文件夹)。 点击“删除”前,请确保只选择了一个对象。 如果您尝试一次删除多个对象,系统将显示错误消息。 如果要删除文件夹,则必须先删除文件夹里的内容(一次一个对象)。
Ivanti 云存储
在 2024.4 版本中,Ivanti 已增加对 Ivanti 云存储的支持,您可以用它来存储想要分发的程序包和文件。 这对于尚未拥有 Azure Blob 存储或 Amazon S3 存储账户的客户很有帮助。
使用 Ivanti 云存储不需要额外的配置或凭据。 每个 Ivanti Neurons 租户都有自己的 Ivanti Azure 存储容器。
在应用程序分发下载文件操作中,您可以访问云文件资源管理器。 您可以在那里选择账户下的 Ivanti 存储。 然后您可以使用上传文件按钮上传想要分发的文件。 您还可以使用删除按钮删除文件。
使用 Ivanti 云存储时请注意以下几点:
- Ivanti 云存储的容量上限为 10 GB,云存储资源管理器将显示正在使用的容量。 此存储容量无法扩展。
- 此处的文件大小不能超过 2 GB。
- Ivanti 设有可扫描上传文件中是否存在恶意软件的服务。 如果检测到恶意软件,该文件将被删除,同时系统会发出 Ivanti Neurons 通知消息说明相关情况。
- 如果只使用 Ivanti 云存储,则无需配置跨域资源共享 (CORS)。
- 不支持创建文件夹。
上传文件
使用上传文件按钮可浏览并上传所选的文件。 上传的文件将放在您在资源管理器中选择的文件夹中。 上传的文件不能大于 2 GB。 一次只可以上传一个文件。 大文件可能需要一段时间才能完成上传,因此您可能无法立即在资源管理器中看到上传的文件。
所选的文件准备上传时,进度条会显示进度。 上传过程中,工作进度指示器会显示相关信息。 上传完成后,系统会显示上传成功或失败的消息。
如果要上传大于 2 GB 的文件,请使用原生 Amazon 或 Azure 管理工具进行上传。
您必须先配置跨源资源共享 (CORS) 才能上传文件。 如果尝试上传文件但未配置 CORS,系统会发出消息,提示您需要先配置 CORS。
Azure Blob 存储上传配置
针对 Azure,需要在账户级别配置 CORS,而不是容器级别。 关于在 Microsoft 中配置 CORS 的信息,请参阅此处。
- 允许的方法:PUT
- 允许的标题:content-type、x-ms-client-request-id、x-ms-useragent、x-ms-version
- 公开的标题:Etag
- 允许的来源:Ivanti Neurons 登录页面上浏览器 URL 中显示的域(不是登录后的 URL)。 具体取决于租户托管的位置。 示例包括 https://nvuprd-sfc.ivanticloud.com、https://ukuprd-sfc.ivanticloud.com 等。
Amazon S3 上传配置
针对 Amazon S3,需要在存储桶级别配置 CORS,而不是账户级别。 关于在 Amazon 中配置 CORS 的信息,请参阅此处。
- 允许的方法:PUT
- 允许的标题:content-type
- 公开的标题:Etag
- 允许的来源:Ivanti Neurons 登录页面上浏览器 URL 中显示的域(不是登录后的 URL)。 具体取决于租户托管的位置。 示例包括 https://nvuprd-sfc.ivanticloud.com、https://ukuprd-sfc.ivanticloud.com 等。
SHA256 哈希值
下载文件选项还包括可选的哈希值字段。 如果您提供哈希值,应用程序分发将验证下载文件的哈希值。 如果值不匹配,应用程序分发将删除下载的文件并停止分发。 如果您希望应用程序分发使用高级分发技术(例如对等下载),则必须提供哈希值。
简单的执行操作允许您指定要执行的文件、命令行以及应使用何种用户身份运行安装程序。 执行 MSI 以及执行 MSIX 操作允许您选择特定于 MSI、MSP 和 MSIX 的操作和显示选项。
包括创建文件夹;移动、复制和删除文件;压缩或解压缩。
根据设备的代理策略重新启动设备。 当应用程序需要重新启动时,在重新启动之前,无法将其他应用程序安装到该设备。
创建或删除注册表项。 设置或删除注册表值
执行批处理文件或 PowerShell 脚本。 如果缺少 PowerShell Core,PowerShell Core 选项将不会安装 PowerShell Core。 自动选项将首先尝试使用 PowerShell Core,如果其未安装,则会回退到 PowerShell。 此操作内置脚本编辑器。 您的脚本代码需要添加到该编辑器中。
暂停程序包执行指定的秒数。 如果前面的操作需要更多时间才能完成,请使用此选项。
使用 Windows 程序包管理器 (winget) 管理程序包。
当在应用程序目录主页中选择添加应用程序 > Windows 程序包管理器 (winget) 并选择一个程序包时,会自动配置此操作。 此操作不需要任何其他操作或修改即可生效。
如有需要,您可以手动添加和配置此操作。 此操作还可与其他操作和检测规则结合使用。
有关使用 winget 的更多信息,请参阅此 Microsoft 主题。
程序包管理器需要受管设备上有最新版本的 winget。 如果在受管设备上禁用了 Microsoft Store,则其 winget 版本可能较旧,向其分发程序包管理器可能会失败。 要解决此问题,请部署更新 winget 版本的程序包或启用 Microsoft Store。
程序包管理器选项面板中包含一个选择程序包按钮,使用该按钮可显示 winget 目录中的可用程序包。 当使用应用程序目录主页中的添加应用程序按钮时,会显示相同的目录。
应用程序目录仅包含 winget 存储库中的应用程序,不包含 msstore 存储库中的应用程序。 如有 msstore 应用程序 ID,可以在 --id 参数后的命令行中手动指定,具体如本节后续所述。
在搜索程序包框中输入文本,搜索目录中所有程序包中的所有元数据。 如果要在特定元数据类别中搜索程序包文本,请以名称:、发布者:等条件开始搜索,如选择搜索字段时的示例所示。
无论目录中显示什么版本,应用程序分发都将安装您选择的程序包的最新可用版本。 您也可以手动配置操作来安装特定的版本。
在目录中选择 winget 程序包,此操作会填充命令行参数以安装该程序包。 如有必要,您可以修改命令行。
以下是典型的 winget 命令行:
install -e --id GitHub.GitHubDesktop --accept-package-agreements --accept-source-agreements --silent
如果要安装应用程序目录中未列出的程序包,您可以创建自己的 winget 命令行。 在 Windows 命令提示符中,winget search <query> 命令将返回匹配程序包的列表。 找到所需程序包的 Id 列字符串,然后在 winget 命令行中,将其添加到 --id 参数后。
Winget 仅在用户上下文中运行,因此用户必须登录才能成功运行程序包。 此外,部分安装程序包需要具有本地管理员权限的用户才能成功运行。
Winget 程序软件包的作者可能会在限于以下任一范围的程序包中包含安装程序:用户(登录用户)、计算机(所有用户),或空(未指定)。 默认情况下,winget 将尝试为设备选择最佳匹配,这通常是用户。
您可以使用 --scope 参数,通过在命令行中指定范围来覆盖此自动选择。 例如,如果您希望为设备上的所有用户安装该程序包,则可以在 winget 命令行中加入 --scope machine。 请注意,如果程序包不支持计算机范围,而您在命令行中使用了该参数,则程序包安装将失败。
与往常一样,请务必在部署程序包之前测试命令行。
程序包检测规则
程序包检测规则可以帮助确定程序包是否已安装,如果已安装则不应再次安装。
在应用程序分发 > 应用程序目录中配置程序包检测规则。 添加或编辑应用程序,然后选择程序包选项卡。 添加检测部署前操作到生成器树并选择该操作以对其进行配置。
仅在开始处理程序包时检查检测规则,因此如果使用检测操作,其将始终是生成器中的第一个项目。 检测规则按照定义它们的顺序运行。
重要提示:如果任何检测步骤解析为 true,程序包处理将停止,并且设备的应用程序状态将显示为合规。
可用的检测规则包括:
提供完整的文件路径和文件名。 选择存在或不存在。
文件版本信息通常仅适用于可执行文件。 应用程序分发使用“文件版本”值,而不是“产品版本”值。 提供完整的文件路径和文件名。 运算符可以是小于、大于、等于或介于之间的变体。 如果您指定的文件和路径不存在或者文件没有可解析的版本,则返回 false。
有关版本和比较运算符如何工作的详细信息,请参阅 Microsoft 的这篇文章。
提供完整的文件路径和文件名。 指定文件大小(以字节为单位)。 应用程序分发使用“大小”而非“磁盘上的大小”。如果指定的文件和路径不存在,则返回 false。
提供完整的文件路径和文件名。 选择您要比较的 SHA-2 位长度。 如果指定的文件和路径不存在,则返回 false。 您可以使用 PowerShell 生成哈希摘要:
-
Get-FileHash -Algorithm SHA256 -Path C:\MyApp\myfile.exe
此规则仅检测日期,而不考虑时间。 提供完整的文件路径和文件名。 选择一个运算符,例如等于。 文件日期必须以 UTC(协调世界时)指定,与您所在区域的 mm/dd/yyyy 格式等效。 应用程序分发使用“修改”日期,而非“创建”日期。 如果指定的文件和路径不存在,则返回 false。 您可以使用 PowerShell 检索 UTC 格式的文件日期:
-
(Get-Item C:\MyApp\myfile.exe).LastWriteTimeUtc
提供 MSI 产品代码 GUID 并选择 MSI 已安装还是未安装。 使用 Microsoft 的 Orca 工具查看“ProductCode”GUID。 您还可以在这些注册表项下查看已安装的 MSI GUID:
- HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
- HKLM\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall
- HKCU\Software\Microsoft\Windows\CurrentVersion\Uninstall
提供您要检测的键的注册表项信息。
- 注册表版本:根据需要选择 32 位或 64 位,如果您想自动匹配目标设备正在使用的版本,也可以选择系统。
- 根键:选择包含要检测的键的根键,例如 HKEY_LOCAL_MACHINE。
- 键:输入要检测的注册表项名称的完整路径(不包括已指定的根键)。
- 指定存在或不存在。
提供要检测的值的注册表项和值信息。 如果键或值不存在或用户无法访问,则该规则将返回 false(除非比较运算符为不存在)。
您必须指定值名称,除非您要检查“(默认)”值,在这种情况下必须将其留空。
进行版本比较时,比较操作数以及与注册表值关联的数据必须采用此处描述的版本格式。 如果其中任何一个不是相应格式,检测规则(和程序包)将生成错误。
有关版本和比较运算符如何工作的详细信息,请参阅 Microsoft 的这篇文章。
字符串比较区分大小写。 如果注册表值包含的数据不是 REG_SZ(字符串)类型,则会将其转换为字符串,如下所示:
- REG_DWORD:使用十进制形式(如 regedit.exe 中所示)。
- REG_QWORD:使用十进制形式(如 regedit.exe 中所示)。
- REG_BINARY:使用 regedit.exe 所用的字节对形式,但采用大写(例如 “46 AA 6C 6B 65 6E”)。
- REG_MULTI_SZ:行与空格连接在一起形成单行(例如,“Line1 Line2 Line3”)。
- REG_EXPAND_SZ:扩展所有环境变量。
检测脚本可以使用 PowerShell(非 PowerShell Core)或批处理语法。 检测是否成功取决于脚本的数字退出代码。 退出代码“0”(零)等于 true。 任何其他退出代码都被视为错误。 退出代码必须是数字,而不是单词“True”。 使用内置脚本编辑器创建脚本。
使用内置脚本编辑器创建脚本,或者您可以使用选择文件选项并浏览以查找文件。 您提供的文件和路径必须存在于目标系统上。 如果设备上尚未存在脚本文件,请使用下载文件操作将其放置在设备上。 执行此操作时,下载的文件将放置在默认路径中,您只需指定文件名即可。
由于检测规则在其他程序包操作之前运行,因此这将检测规则脚本置于应用程序安装过程中的独特阶段。 可以在此处执行更复杂的操作,例如运行自定义升级脚本来查找较旧的应用程序安装,如果找到它,则在继续处理程序包的其余部分之前将其卸载。
检测规则和操作日志记录
应用程序分发为部署到设备的每个应用程序创建一个日志文件。 该日志包含每个检测规则和其他程序包操作的条目。 如果检测规则未按预期工作,请使用日志文件来帮助确定原因。 每个设备上的日志都存储在该文件夹中:
- C:\ProgramData\Ivanti\Ivanti Cloud Agent\Logs\SWDApps
每个日志文件名都包含程序包 GUID。 如果您在应用程序目录中编辑程序包,您可以在 Web 浏览器 URL 中看到其程序包 GUID。 这将帮助您找到您感兴趣的日志文件。
您可以从应用程序分发 > 部署状态页面远程查看简化日志。 找到您要查看的设备和程序包,然后在右侧选择操作菜单的查看日志选项。