我们一直在处理带有集合的包(现在是应用程序)的所有定位逻辑。既然我们已经从 SCCM 2007 转移到 SCCM 2012 SP1,建议我们将该逻辑转移到应用程序模型并使用全局条件和要求实施它。这有许多积极的好处 - 集合纯粹用于分层或逻辑分组,我们在使用 Supercedence 时获得更无缝的应用程序部署,以及改进的检测逻辑。
我将使用 Adobe Flash Player 插件作为示例。我们只想将 Adobe Flash Player Plugin 部署到安装了 Firefox 的工作站。使用 SCCM 2007 Package-Program 模型,我们将基于 WQL 查询创建一个集合,其中包含安装了 Firefox 的所有工作站:
select * from SMS_R_System inner join SMS_G_System_SoftwareProduct
on SMS_G_System_SoftwareProduct.ResourceId = SMS_R_System.ResourceId
where SMS_G_System_SoftwareProduct.ProductName like "Mozilla Firefox"
Run Code Online (Sandbox Code Playgroud)
一旦我们创建了集合,我们就会针对它部署我们的包程序。我正在尝试使用应用程序的全局条件和要求逻辑复制相同的逻辑。我所有尝试构建基于 WQL 查询的全局条件都会导致wbemErrTypeMismatch错误 ( 2147749893 (0x80041005))。
既然最佳实践建议我们将目标逻辑与应用程序捆绑在一起,我们需要做的是创建一个适当的 WQL 查询全局条件,然后我们可以使用应用程序的需求来评估它。
让我们从 WQL 查询开始。我使用 Scriptomatic 来转储SMS_InstalledSoftware属于root\cimv2\sms命名空间的WMI 类中的所有内容。我有理由确信SMS_InstalledSoftware是在尝试评估是否安装了某些东西时运行查询的最佳位置,因为 Win32_Product 仅适用于 Windows Installer 安装的软件。
我找到以下与 Firefox 相关的对象:
ARPDisplayName: …Run Code Online (Sandbox Code Playgroud)