创建包含多变量设置的预配包

在贵组织中,你可能对所管理的设备拥有不同的配置要求。 你可以为贵组织中拥有不同要求的每组设备创建单独的预配包。 或者,你可以创建多变量预配包,以及可适用于多个条件的单个预配包。 例如,在单个预配包中,可以定义一组自定义设置,这些设置适用于为法语设置的设备,并为为日语设置的设备定义另一组自定义设置。

若要预配多变量设置,你可以使用 Windows 配置设计器创建预备包,其中包含你要应用于任何设备的所有自定义设置。 接下来,你可以手动编辑该项目的 .XML 文件,以定义每组设备 (Target)。 对于每个 Target,你至少要使用值指定一个 Condition,以标识要接收配置的设备。 最后,对于每个 Target,你可以提供要应用于这些设备的自定义设置。

我们先来了解一下如何定义 Target

目标

在 XML 文件中,你可以针对每个 Target 提供 ID 或易记名称。 每个 Target 至少由一个 TargetState 定义,后者至少包含一个 ConditionCondition 元素定义条件和指定值之间的匹配类型。

Target 可以拥有多个 TargetState,而 TargetState 可以拥有多个 Condition

具有多个目标状态和条件的目标。

以下信息介绍了目标定义的逻辑:

  • 当所有 Condition 元素均为 TRUE 时, TargetState 为 TRUE:

    当所有条件都为 true 时,目标状态为 true。

  • 如果任一 TargetState 元素为 TRUE, 则 Target 为 TRUE, 并且 ID 可用于 设置自定义项:

    如果任何目标状态为 true,则目标也为 true

条件

下表显示了 TargetState 的 Windows 客户端预配中支持的条件:

条件名称 条件优先级 适用于桌面版的 Windows 客户端 值类型 值说明
MNC P0 支持 数字字符串 用于基于移动网络代码 (MNC) 值的目标设置。
MCC P0 支持 数字字符串 用于基于移动国家/地区代码 (MCC) 值的目标设置。
SPN P0 支持 字符串 用于基于服务提供商名称 (SPN) 值的目标设置。
PNN P0 支持 字符串 用于基于公共陆地移动网络 (PLMN) 网络名称值的目标设置。
GID1 P0 支持 数字字符串 用于基于组标识符(级别 1)值的目标设置。
ICCID P0 支持 数字字符串 用于基于集成电路卡标识符 (ICCID) 值的目标设置。
Roaming P0 不适用 布尔 用于指定漫游。 将值设置为 1 (漫游) 或 0 (非漫游) 。
UICC P0 不适用 枚举 用于指定通用集成电路卡 (UICC) 状态。 将值设置为以下值之一:
0 - 空
1 - 就绪
2 - 已锁定
UICCSLOT P0 不适用 数字字符串 用于指定 UICC 槽。 设置以下值之一的值:
0 - 槽 0
1 - 槽 1
ProcessorType P1 支持 字符串 用于基于处理器类型的目标设置。
ProcessorName P1 支持 字符串 用于基于处理器名称的目标设置。
AoAc(“始终可用”,“始终连接”) P1 支持 布尔 将值设置为 0 (false) 或 1 (true)。 如果此条件为 TRUE,则系统支持 S0 低功耗空闲模式。
PowerPlatformRole P1 支持 枚举 指示首选电源管理配置文件。 基于 POWER_PLATFORM_ROLE 枚举设置值。
SocIdentifier P1 支持 字符串 用于基于 Soc 标识符的目标设置。 自 25301 OS 内部版本起可用。
Architecture P1 支持 字符串 匹配 PROCESSOR_ARCHITECTURE 环境变量。
Server P1 支持 布尔 将值设置为 0 (false) 或 1 (true),以标识服务器。
区域 P1 支持 枚举 用于基于区域的目标设置,使用每个 ISO 3166-1 alpha-2 的两位数 alpha ISO 代码。
Lang P1 支持 枚举 使用 基于语言代码的目标设置,使用两位数 ISO 639 alpha-2 代码

Windows 客户端支持的匹配类型包括:

匹配类型 语法 示例
直接匹配 匹配类型按原样指定 <Condition Name="ProcessorName" Value="Barton" />
正则表达式 (正则表达式) 匹配 匹配类型前缀为 Pattern: <Condition Name="ProcessorName" Value="Pattern:.*Celeron.*" />
数字范围匹配 匹配类型前缀为 !Range: <Condition Name="MNC" Value="!Range:400, 550" />

TargetState 优先级

你可以在预配包内定义多个 TargetState,以将设置应用到与设备条件匹配的设备。 当预配引擎评估每个 TargetState 时,多个 TargetState 可能适合当前设备条件。 为了确定设置的应用顺序,系统会为每个 TargetState 分配一个优先级。

先应用与优先级较低的 TargetState 匹配的设置,然后再应用与优先级较高的 TargetState 匹配的设置。 这意味着,优先级较高的 TargetState 的设置可以覆盖优先级较低的 TargetState 的设置。

根据预配包中每个 TargetState 的定义顺序,应用与多个具有同等优先级的 TargetState 匹配的设置。

TargetState 优先级基于条件的优先级进行分配(有关优先级,请参阅条件表)。 优先级评估规则如下所示:

  1. 具有 P0 条件的 TargetState 高于无 P0 条件的 TargetState
  2. 具有 P0 和 P1 条件的 TargetState 高于只有 P0 条件的 TargetState
  3. 具有较多匹配的 P0 条件的 TargetState 高于具有较少匹配的 P0 条件的 TargetState,与匹配的 P1 条件数无关。
  4. 如果匹配的 P0 条件数相等,则具有最匹配的 P1 条件的 TargetState 优先级更高。
  5. 如果 P0 和 P1 条件同等匹配,则具有最多匹配条件总数的 TargetState 具有最高的优先级。

创建包含多变量设置的预配包

请按照以下步骤创建包含多变量功能的预配包。

  1. 生成预配包并配置你要在某些条件下应用的自定义项。 有关详细信息,请参阅创建预配包

  2. 配置设置后,保存项目。

  3. 打开项目文件夹,然后将 customizations.xml 文件复制到任何本地位置。

  4. 使用 XML 或文本编辑器打开 customizations.xml 文件。

    customizations.xml 文件保留在创建预配包时所配置的包元数据(包括包所有者和排名)和设置。 该文件的 Customizations 节点包含 Common 部分,其中包含自定义设置。

    以下示例显示了示例 customizations.xml 文件的内容。

    <?xml version="1.0" encoding="utf-8"?>
    <WindowsCustomizations>
     <PackageConfig xmlns="urn:schemas-Microsoft-com:Windows-ICD-Package-Config.v1.0">
       <ID>{6aaa4dfa-00d7-4aaa-8adf-73c6a7e2501e}</ID>
       <Name>My Provisioning Package</Name>
       <Version>1.0</Version>
       <OwnerType>OEM</OwnerType>
       <Rank>50</Rank>
     </PackageConfig>
     <Settings xmlns="urn:schemas-microsoft-com:windows-provisioning">
       <Customizations>
         <Common>
           <Policies>
             <AllowBrowser>0</AllowBrowser>
             <AllowCamera>0</AllowCamera>
             <AllowBluetooth>0</AllowBluetooth>
           </Policies>
           <HotSpot>
             <Enabled>0</Enabled>
           </HotSpot>
         </Common>
       </Customizations>
     </Settings>
    </WindowsCustomizations>
    
    
  5. 编辑 customizations.xml 文件以创建 Targets 部分,以描述处理多变量设置的条件。

    以下示例显示了 customizations.xml,该 customizations.xml 已修改为包含多个条件,包括 ProcessorNameProcessorTypeMCCMNC

    <?xml version="1.0" encoding="utf-8"?>
    <WindowsCustomizations>
     <PackageConfig xmlns="urn:schemas-Microsoft-com:Windows-ICD-Package-Config.v1.0">
       <ID>{6aaa4dfa-00d7-4aaa-8adf-73c6a7e2501e}</ID>
       <Name>My Provisioning Package</Name>
       <Version>1.0</Version>
       <OwnerType>OEM</OwnerType>
       <Rank>50</Rank>
     </PackageConfig>
     <Settings xmlns="urn:schemas-microsoft-com:windows-provisioning">
       <Customizations>
         <Common>
           <Policies>
             <AllowBrowser>0</AllowBrowser>
             <AllowCamera>0</AllowCamera>
             <AllowBluetooth>0</AllowBluetooth>
           </Policies>
           <HotSpot>
             <Enabled>0</Enabled>
           </HotSpot>
         </Common>
         <Targets>
           <Target Id="Unique target identifier for desktop">
             <TargetState>
               <Condition Name="ProcessorName" Value="Pattern:.*Celeron.*" />
               <Condition Name="ProcessorType" Value="Pattern:.*(I|i)ntel.*" />
             </TargetState>
             <TargetState>
               <Condition Name="ProcessorName" Value="Barton" />
               <Condition Name="ProcessorType" Value="Athlon MP" />
             </TargetState>
           </Target>
           <Target Id="Mobile target">
             <TargetState>
               <Condition Name="MCC" Value="Range:310, 320" />
               <Condition Name="MNC" Value="!Range:400, 550" />
             </TargetState>
           </Target>
         </Targets>
       </Customizations>
     </Settings>
    </WindowsCustomizations>
    
    
  6. 在 customizations.xml 文件中,为需要自定义的设置创建 Variant 部分。 要实现此目的,请执行以下操作:

    a. 定义子 TargetRefs 元素。 b. 在 TargetRefs 元素中,定义 TargetRef 元素。 你可以为需要应用于自定义设置的每个 Id 定义多个 TargetRef 元素。 c. 将兼容设置从 Common 部分移动到 Variant 部分。

    如果任何 TargetRef 元素与 Target 匹配,则将应用 Variant 中的所有设置。

    注意

    你可以定义多个 Variant 部分。 驻留在 Common 部分中的设置会无条件地应用于每个触发事件。

    以下示例演示更新 customizations.xml,以包括 Variant 部分,以及满足变体条件时应用的已移动设置。

    <?xml version="1.0" encoding="utf-8"?>
    <WindowsCustomizations>
     <PackageConfig xmlns="urn:schemas-Microsoft-com:Windows-ICD-Package-Config.v1.0">
       <ID>{6aaa4dfa-00d7-4aaa-8adf-73c6a7e2501e}</ID>
       <Name>My Provisioning Package</Name>
       <Version>1.0</Version>
       <OwnerType>OEM</OwnerType>
       <Rank>50</Rank>
     </PackageConfig>
     <Settings xmlns="urn:schemas-microsoft-com:windows-provisioning">
       <Customizations>
         <Common>
         </Common>
         <Targets>
           <Target Id="Unique target identifier for desktop">
             <TargetState>
               <Condition Name="ProcessorName" Value="Pattern:.*Celeron.*" />
               <Condition Name="ProcessorType" Value="Pattern:.*(I|i)ntel.*" />
             </TargetState>
             <TargetState>
               <Condition Name="ProcessorName" Value="Barton" />
               <Condition Name="ProcessorType" Value="Athlon MP" />
             </TargetState>
           </Target>
           <Target Id="Mobile target">
             <TargetState>
               <Condition Name="MCC" Value="Range:310, 320" />
               <Condition Name="MNC" Value="!Range:400, 550" />
             </TargetState>
           </Target>
         </Targets>
         <Variant>
           <TargetRefs>
             <TargetRef Id="Unique target identifier for desktop" />
             <TargetRef Id="Mobile target" />
           </TargetRefs>
           <Settings>
             <Policies>
               <AllowBrowser>1</AllowBrowser>
               <AllowCamera>1</AllowCamera>
               <AllowBluetooth>1</AllowBluetooth>
             </Policies>
             <HotSpot>
               <Enabled>1</Enabled>
             </HotSpot>
           </Settings>
         </Variant>
       </Customizations>
     </Settings>
    </WindowsCustomizations>
    
  7. 保存更新的 customizations.xml 文件并记下此更新文件的路径。 下一步需要路径作为值之一。

  8. 使用 Windows 配置设计器命令行接口来通过更新的 customizations.xml 创建预配包。

    例如:

    icd.exe /Build-ProvisioningPackage /CustomizationXML:"C:\CustomProject\customizations.xml" /PackagePath:"C:\CustomProject\output.ppkg" /StoreFile:C:\Program Files (x86)\Windows Kits\10\Assessment and Deployment Kit\Imaging and Configuration Designer\x86\Microsoft-Common-Provisioning.dat"
    

在此示例中, StoreFile 对应于用于为所需 Windows 版本创建包的设置存储的位置。

注意

此步骤中创建的预配包包含多变量设置。 你既可以将此包用作可应用于 Windows 设备的独立包,又可在启动另一个项目时将其用作基础。

触发预配的事件

在 Windows 客户端设备上安装多变量预配包时,预配引擎会在每个事件中应用匹配的条件设置,并触发预配。

以下事件触发 Windows 客户端设备上的预配:

事件 适用于桌面版的 Windows 客户端
系统启动 支持
操作系统更新 已计划
在设备首次运行体验期间安装包 支持
检测 SIM 是否存在或更新 支持
在运行时安装包 支持
检测到漫游 不支持