1

在 GUI 中为 SCCM 创建标准程序时,有一个可爱的小复选框“始终首先运行此程序”:

程序要求的屏幕截图

我找不到使用 PowerShell 选中此框的方法。有谁知道这是否可能?

对于那些想要更多细节的人:

我有一个包含四个不同程序的包。我想按特定顺序执行这些程序中的每一个。我能够使用我在这里找到的方法添加依赖程序,但它只添加程序,它没有选中“始终首先运行这个程序”框。我将使用 New-CMProgram 创建的对象与我手动创建的对象进行了比较,该 GUI 已选中该框,但就对象和属性而言,它们完全相同。

我正在运行最新版本的 SCCM:版本 1802

4

1 回答 1

2

这应该是 ProgramFlags 属性的一部分,它基本上是几个选项的位掩码,遗憾的是它们没有自己的显式属性。这是所有旧的包/程序类型对象的一个​​常见概念,处理起来有点麻烦。程序标志在SMS_Program WMI 类的描述中有详细描述,它说:

0x00000080 (7): RUN_DEPENDANT_ALWAYS。如果设置,则应始终运行此程序的直接依赖项。

所以基本上你必须翻转第 7 位才能打开或关闭它。现在我不知道你是否熟悉位掩码的这个概念,它基本上意味着以二进制形式查看一个整数并为每个位置分配一个布尔值来翻转它,但将它存储为最终数字,即“总和”所有的位。

因此,在您的情况下,这意味着您的 ProgramFlags 应该类似于 2282791936 (这些数字当然会根据您的其他选项而有所不同,但是当您更改设置时它们应该会改变)当您没有选中该框时,如果您有 2282792064它检查了。(类描述中提到的 0x80 是十进制的 128,所以一个数字应该比另一个数字高 128)

现在,“官方”的编程方式当然是从描述中收集你想要的所有标志,并建立你自己的号码并使用它,但我发现其中一些奇怪地依赖,有些难以理解,所以在像您这样的情况下,我从 GUI 角度确切地知道我想要什么,我总是根据需要创建一个程序,导出值并将其硬编码到我的脚本中。您可以使用与依赖程序相同的方式执行此操作:

$p = Get-CMProgram -PackageName "packagename" -ProgramName "programname"
$p.ProgramFlags = <your flags>
$p.put()
于 2018-08-17T07:47:07.080 回答