首先使用 PowerShell 将依赖程序设置为始终 运行
Set Dependent Program to Always run first with PowerShell
在 GUI 中为 SCCM 创建标准程序时,有一个可爱的小复选框“始终 运行 此程序优先”:
我找不到使用 PowerShell 选中此框的方法。有谁知道这是否可能?
对于那些想要更多细节的人:
我有一个包,里面有四个不同的程序。我想按特定顺序执行这些程序中的每一个。我能够使用我发现 here 的方法添加从属程序,但它只添加了程序,它没有选中“始终 运行 此程序优先”框。我将我使用 New-CMProgram 创建的对象与我使用选中复选框的 GUI 手动创建的对象进行了比较,但就对象和属性而言,它们完全相同。
我运行正在使用最新版本的 SCCM:版本 1802
这应该是 ProgramFlags 属性 的一部分,它基本上是几个选项的位掩码,遗憾的是它们没有自己的显式 属性。这是所有旧 Package/Program 类型对象的共同概念,处理起来有点麻烦。程序标志在 description of the SMS_Program WMI class 中有详细描述,它说:
0x00000080 (7): RUN_DEPENDANT_ALWAYS. If set, this program's immediate dependent should always be run.
所以基本上你必须翻转第 7 位才能打开或关闭它。
现在我不知道你是否熟悉位掩码的概念,它基本上意味着查看二进制形式的整数并为每个位置分配一个布尔值以翻转它但将其存储为最终数字 "sum" 的所有位。
所以在你的情况下,这意味着你的 ProgramFlags 应该类似于 2282791936(这些数字当然会因你的其他选项而异,但当你更改设置时它们应该会改变)当你没有选中该框时和 2282792064(如果您已检查)。 (class 描述中提到的 0x80 是十进制的 128,所以一个数字应该比另一个大 128)
现在 "official" 编程的方法当然是从描述中收集你想要的所有标志并建立你自己的数字并使用它,但我发现其中一些奇怪地依赖有些难以理解,所以在像你这样的情况下,我从 GUI 的角度确切地知道我想要什么,我总是根据需要创建一个程序,导出值并将其硬编码到我的脚本中。您可以按照与依赖程序相同的方式执行此操作:
$p = Get-CMProgram -PackageName "packagename" -ProgramName "programname"
$p.ProgramFlags = <your flags>
$p.put()
在 GUI 中为 SCCM 创建标准程序时,有一个可爱的小复选框“始终 运行 此程序优先”:
我找不到使用 PowerShell 选中此框的方法。有谁知道这是否可能?
对于那些想要更多细节的人:
我有一个包,里面有四个不同的程序。我想按特定顺序执行这些程序中的每一个。我能够使用我发现 here 的方法添加从属程序,但它只添加了程序,它没有选中“始终 运行 此程序优先”框。我将我使用 New-CMProgram 创建的对象与我使用选中复选框的 GUI 手动创建的对象进行了比较,但就对象和属性而言,它们完全相同。
我运行正在使用最新版本的 SCCM:版本 1802
这应该是 ProgramFlags 属性 的一部分,它基本上是几个选项的位掩码,遗憾的是它们没有自己的显式 属性。这是所有旧 Package/Program 类型对象的共同概念,处理起来有点麻烦。程序标志在 description of the SMS_Program WMI class 中有详细描述,它说:
0x00000080 (7): RUN_DEPENDANT_ALWAYS. If set, this program's immediate dependent should always be run.
所以基本上你必须翻转第 7 位才能打开或关闭它。 现在我不知道你是否熟悉位掩码的概念,它基本上意味着查看二进制形式的整数并为每个位置分配一个布尔值以翻转它但将其存储为最终数字 "sum" 的所有位。
所以在你的情况下,这意味着你的 ProgramFlags 应该类似于 2282791936(这些数字当然会因你的其他选项而异,但当你更改设置时它们应该会改变)当你没有选中该框时和 2282792064(如果您已检查)。 (class 描述中提到的 0x80 是十进制的 128,所以一个数字应该比另一个大 128)
现在 "official" 编程的方法当然是从描述中收集你想要的所有标志并建立你自己的数字并使用它,但我发现其中一些奇怪地依赖有些难以理解,所以在像你这样的情况下,我从 GUI 的角度确切地知道我想要什么,我总是根据需要创建一个程序,导出值并将其硬编码到我的脚本中。您可以按照与依赖程序相同的方式执行此操作:
$p = Get-CMProgram -PackageName "packagename" -ProgramName "programname"
$p.ProgramFlags = <your flags>
$p.put()