关于Configuration Manager自定义操作 MOF 文件
在 Configuration Manager 中,操作系统部署操作在托管对象格式 (MOF) 文件 %ProgramFiles%\Microsoft Configuration Manager\bin\i386\_tasksequenceprovider.mof 中定义。
创建自定义操作时,必须创建声明自定义操作的 MOF 文件。 然后,使用 Mofcomp.exe 将更改添加到 SMS 提供程序。 有关详细信息,请参阅如何为Configuration Manager自定义操作创建 MOF 文件。
管理员使用自定义操作控件配置 MOF 文件定义的自定义操作。 有关详细信息,请参阅关于Configuration Manager自定义操作。
MOF 文件内容
自定义操作派生自 SMS_TaskSequence_Action 服务器 WMI 类。 MOF 文件声明包括命令行、任务序列变量、类别和自定义操作控件程序集位置的类定义和各种限定符。
类中声明的属性(带 CommandLineArg
限定符的属性除外)在客户端部署期间可用作任务序列变量。 有关详细信息,请参阅如何在正在运行Configuration Manager任务序列中使用任务序列变量。
自定义操作的命名空间为 \\root\SMS_Site_SITECODE。 编译 MOF 文件时,自定义操作是 SMS_TaskSequence_Action服务器 WMI 类的子级。
注意
有关 MOF 示例,请参阅在 _tasksequenceprovider.mof 中声明的任务序列操作 MOF。
自定义操作声明的 MOF 文件部分将类似于以下示例:
[ CommandLine("smsswd.exe /run:%1 Application.exe /user:%2"),
VariablePrefix("MyCustomActionPrefix"),
ActionCategory("My Custom Action Category,7,1"),
ActionName{"ConfigMgrTSAction.dll", "ConfigMgrTSAction.Properties.Resources", "ConfigMgrTSAction"},
ActionUI{"ConfigMgrTSAction.dll", "ConfigMgrTSAction","ConfigMgrTSActionControl",
"ConfigureTSActionOptions"}
]
class ConfigMgrTSActionControl : SMS_TaskSequence_Action
{
[TaskSequencePackage, CommandLineArg(1)]
string PackageIDForApplicationExe;
[Not_Null, CommandLineArg(2)]
string User;
[VariableName("CustomLocation")]
string Location;
};
完整的 MOF 还指定命名空间和其他信息,
有关此示例的完整 MOF,请参阅如何为Configuration Manager自定义操作创建 MOF 文件。
命令行
类限定符中介绍了操作的 CommandLine
命令行。 它定义调用的应用程序以及可以提供的各种参数。 对于每个命令行参数,对应类属性上的参数都有一个 CommandLineArg
类限定符。
CommandLine
通常采用以下格式:
CommandLine("smsswd.exe /run:%1 Application.exe %2 %3")
Smsswd.exe用于在包中运行程序。 它需要以下参数:
参数 | 说明 |
---|---|
/run:%1 | 标识应用程序位于的包。 %1 是包标识符 (SMS_Package服务器 WMI 类PackageID 属性) 。 |
Application.exe | 执行的自定义操作应用程序。 |
%2 - %n | Application.exe的一个或多个命令行参数。 |
命令行替换字符串 %1、%2 等由 CommandLineArg
类限定符定义。 例如,下面声明 %1。
[TaskSequencePackage, CommandLineArg(1)]
string PackageIDForApplicationExe;
使用自定义操作控件时,可以使用 PackageIDForApplicationExe
属性来配置包标识符。
注意
使用 CommandLineArg
限定符声明的属性在客户端部署期间不能用作任务序列变量。
操作类别
通过使用 ActionCategory
类限定符,可以在任务序列编辑器下拉菜单中将操作与特定类别相关联。
注意
不要使用已由其他操作使用的类别。
语法是:
ActionCategory{CategoryName,ActionOrder,CategoryOrder}
CategoryName
类别名称。
ActionOrder
类别中的操作顺序。
CategoryOrder
所有类别中的类别顺序。
可向其添加操作的默认Configuration Manager类别为:
常规
磁盘
用户状态
图像
司机
设置
还可以通过在类限定符中
ActionCategory
指定新类别来创建新类别。 例如,以下 MOF 文件创建名为“我的自定义类别”的新类别。 该操作在类别中排在第二位,该类别的总排名第五。ActionCategory{"My Custom Category",2,5"},
ActionName
类 ActionName
限定符定义自定义操作控件名称。 限定符具有以下语法:
ActionName{"Assembly", "Namespace.Properties.Resources", "Control"}
Assembly
包含操作控件的程序集。
Namespace.Properties.Resources
包含显示的操作名称字符串的资源的命名空间。 有关详细信息,请参阅如何创建Configuration Manager自定义操作控件。
Control
包含字符串资源的控件。
操作用户界面
类 ActionUI
限定符定义操作使用的程序集和类的位置。 限定符具有以下语法:
ActionUI{"Assembly","Namespace", "Control", "Option control"}
Assembly
包含操作控件的程序集。
Namespace
操作控件所在的命名空间。
Control
任务序列编辑器中显示的操作控件。 它承载选项控件页。
Option control
用于在任务序列编辑器中管理操作选项的页面。
可以通过包括更多用逗号分隔的控件类名称来实现多个控件选项卡。 例如:
ActionUI{“Assembly”,“Namespace”,“Control1”, “Control2”, “Control3”, “Option control”}
操作变量
限定 VariableName
符用于替代属性的默认变量名称。
可以通过添加 VariableName
类限定符将类属性定义为任务序列变量。 在上面的示例中, 属性 MessageTimeout
是名为 RebootTimeout
的操作变量。
VariablePrefix
如果使用类限定符,则变量以类限定符值作为前缀。
有关变量用法的详细信息,请参阅如何在正在运行Configuration Manager任务序列中使用任务序列变量
属性
限定 符
有几个限定符可以应用于 MOF 属性。 通常使用以下项:
限定符 | 说明 |
---|---|
CommandLineArg | 应在命令行上插入的属性 |
Not_Null | 此属性需要一个值。 |
ValueMap | 指定允许的字符串值的列表。 |
ValueRange | 指定) int 字段 (允许的值的范围。 |
RequiredIfNull | 如果另一个属性为 null,则此属性需要一个值。 |
TaskSequencePackage | 将属性标识为包标识符。 |
VariableName | 为任务序列环境中的 属性指定其他名称。 |
AllowedLen | 指定字符串中的最小和最大字符数。 |
SuccessCodes | 指定可执行文件中的一个或多个指示成功的返回代码。 |
限制
常规限定符约束可应用于类属性。 例如,在上面的示例中,命令行参数不能是
null
。 有关详细信息,请参阅 Windows Management Instrumentation (WMI) SDK。确保在 MOF 文件、自定义操作控件和客户端应用程序之间同步属性名称和限定符。 属性名称必须匹配以及任何限制。 例如,如果某个
int
属性是必需的,并且它必须位于 1 - 512 范围内,则 MOF 文件应具有Not_Null
和ValueRange
限定符,则自定义控件应确保属性已设置并在范围内,并且客户端应用程序应在使用前验证值。
另请参阅
关于Configuration Manager自定义操作
如何创建Configuration Manager自定义操作控件
如何为Configuration Manager自定义操作创建 MOF 文件
如何在正在运行的Configuration Manager任务序列中使用任务序列变量
关于Configuration Manager自定义操作客户端应用程序