将相关程序设置为始终首先使用PowerShell运行

时间:2018-08-16 21:44:13

标签: powershell sccm

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

Screenshot of Program Requirements

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

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

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

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

1 个答案:

答案 0 :(得分:2)

这应该是ProgramFlags属性的一部分,该属性基本上是几个选项的位掩码,不幸的是,这些选项没有自己的显式属性。对于所有旧的Package / Program类型对象,这是一个普遍的概念,有些处理令人讨厌。程序标志在description of the SMS_Program WMI class中进行了详细说明,其内容为:

  

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

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

因此,在您的情况下,这表示您未选中复选框且2282792064时,ProgramFlags应该类似于2279791936(当然,这些数字可能会根据您的其他其他选项而有所不同,但它们应在更改时更改)。如果您已检查。 (类描述中提到的0x80是十进制的128,因此一个数字应比另一个数字高128)

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

$p = Get-CMProgram -PackageName "packagename" -ProgramName "programname"
$p.ProgramFlags = <your flags>
$p.put()