Criar um pacote de provisionamento com configurações multivariadas

Em sua organização, você pode ter requisitos de configuração diferentes para dispositivos que você gerencia. Você pode criar pacotes de provisionamento separados para cada grupo de dispositivos em sua organização que possuem requisitos diferentes. Ou, você pode criar um pacote de provisionamento multivariado, um pacote de provisionamento único que pode funcionar para múltiplas condições. Por exemplo, num único pacote de aprovisionamento, pode definir um conjunto de definições de personalização que se aplicam a dispositivos configurados para francês e um conjunto diferente de definições de personalização para dispositivos configurados para japonês.

Para provisionar configurações multivariadas, use seu Designer de Configuração do Windows para criar um pacote de provisionamento que contém todas as configurações de personalização que você deseja aplicar a qualquer um de seus dispositivos. Em seguida, você edita manualmente o arquivo .XML desse projeto para definir cada conjunto de dispositivos (um Destino). Para cada Destino, você especifica pelo menos uma Condição com um valor, que identifica os dispositivos que receberão a configuração. Por fim, para cada Destino, você fornece as configurações de personalização a serem aplicadas nesses dispositivos.

Vamos começar aprendendo como definir um Destino.

Target

No arquivo XML, você deve fornecer um Id ou nome amigável para cada Destino. Cada Destino é definido por pelo menos um TargetState, que contém pelo menos uma Condição. Um elemento Condição define o tipo correspondente entre a condição e o valor especificado.

Um Destino pode ter mais de um TargetState, e um TargetState pode ter mais de uma Condição.

Destino com vários estados e condições de destino.

As seguintes informações descrevem a lógica da definição de destino:

  • Quando todos os elementos da Condição são VERDADEIRO, TargetState é VERDADEIRO:

    O estado de destino é verdadeiro quando todas as condições são verdadeiras.

  • Se algum dos elementos TargetState for TRUE, Target é TRUE e o ID pode ser utilizado para definir personalizações:

    O destino é verdadeiro se qualquer estado de destino for verdadeiro

Condições

A tabela seguinte mostra as condições suportadas no aprovisionamento de clientes do Windows para um TargetState:

Nome da condição Prioridade da condição Cliente Windows para edições de ambiente de trabalho Tipo de valor Descrição do valor
MNC P0 Com suporte Cadeia de caracteres de dígito Use para direcionar as configurações com base no valor MNC (Mobile Network Code).
MCC P0 Com suporte Cadeia de caracteres de dígito Use para direcionar as configurações com base no valor MCC (Mobile Country Code).
SPN P0 Com suporte String Use para direcionar as configurações com base no valor SPN (nome do provedor de serviços).
PNN P0 Com suporte String Use para direcionar as configurações com base no valor de nome de rede PLMN (public land mobile network).
GID1 P0 Com suporte Cadeia de caracteres de dígito Use para direcionar as configurações com base no valor de identificador de grupo (nível 1).
ICCID P0 Com suporte Cadeia de caracteres de dígito Use para direcionar as configurações com base no valor ICCID (Integrated Circuit Card Identifier).
Roaming P0 N/D Booliano Use para especificar o roaming. Defina o valor como 1 (roaming) ou 0 (sem sobreaplicação).
UICC P0 N/D Enumeração Use para especificar o estado da Placa de Circuito Integrado Universal (UICC). Defina o valor para um destes valores:
0 - Vazio
1 - Pronto
2 - Bloqueado
UICCSLOT P0 N/D Cadeia de caracteres de dígito Use para especificar o slot UICC. Defina o valor um destes valores:
0 - Bloco 0
1 - Ranhura 1
ProcessorType P1 Com suporte String Use para direcionar as configurações com base no tipo de processador.
ProcessorName P1 Com suporte String Use para direcionar as configurações com base no nome do processador.
AoAc ("Sempre ligado, Sempre conectado") P1 Com suporte Booliano Defina o valor para 0 (falso) ou 1 (verdadeiro). Se essa condição for VERDADEIRO, o sistema é compatível com o modelo ocioso de baixo consumo de energia S0.
PowerPlatformRole P1 Com suporte Enumeração Indica o perfil de gerenciamento de energia preferencial. Defina o valor com base na Enumeração de POWER_PLATFORM_ROLE.
SocIdentifier P1 Com suporte String Utilize para definir o destino com base no Identificador soc. Disponível desde a versão de compilação do SO 25301.
Arquitetura P1 Com suporte String Corresponde a variável de ambiente PROCESSOR_ARCHITECTURE.
Servidor P1 Com suporte Booliano Defina o valor como 0 (falso) ou 1 (verdadeiro) para identificar um servidor.
Região P1 Com suporte Enumeração Utilize para definir o destino com base na região, utilizando o código ISO alfa de dois dígitos por ISO 3166-1 alfa-2.
Idioma P1 Com suporte Enumeração Utilize para definir o destino com base no código de idioma, utilizando o código ISO 639 alfa-2 de dois dígitos.

Os tipos de correspondência suportados no cliente Windows são:

Tipo de correspondência Sintaxe Exemplo
Correspondência direta O tipo de correspondência é especificado como está <Condition Name="ProcessorName" Value="Barton" />
Correspondência de expressões regulares (Regex) O tipo correspondente tem o prefixo Pattern: <Condition Name="ProcessorName" Value="Pattern:.*Celeron.*" />
Correspondência de intervalo numérico O tipo correspondente tem o prefixo !Range: <Condition Name="MNC" Value="!Range:400, 550" />

Prioridades de TargetState

É possível definir mais de um TargetState dentro de um pacote de provisionamento para aplicar aos dispositivos de configurações correspondentes a condições de dispositivos. Quando o motor de aprovisionamento avalia cada TargetState, mais do que um TargetState pode ajustar-se às condições atuais do dispositivo. Para determinar a ordem na qual as configurações são aplicadas, o sistema atribui uma prioridade a cada TargetState.

Uma configuração correspondente a TargetState com uma prioridade mais baixa é aplicada antes da configuração correspondente a um TargetState de prioridade mais alta. Isso significa que uma configuração para o TargetState com a prioridade mais alta pode substituir uma configuração para o TargetState com a prioridade mais baixa.

As configurações correspondentes a mais de um TargetState com prioridade igual são aplicadas de acordo com a ordem em que cada TargetState definido no pacote de provisionamento.

A prioridade do TargetState é atribuída com base na prioridade da condição (consulte a Tabela de condições em busca de prioridades). As regras de avaliação de prioridade serão como as seguintes:

  1. Um TargetState com condições P0 é maior que um TargetState sem condições P0.
  2. Um TargetState com condições P0 e P1 é maior que um TargetState com apenas a condição P0.
  3. Um TargetState com um número maior de condições de P0 correspondentes é maior do que TargetState com menos condições de P0 correspondentes, independentemente do número de condições de P1 correspondentes.
  4. Se o número de condições P0 correspondidas for equivalente, o TargetState com as condições P1 mais correspondidas tem uma prioridade mais elevada.
  5. Se as condições de P0 e P1 forem igualmente atendidas, então o TargetState com o maior número total de condições correspondentes tem prioridade mais alta.

Criar um pacote de provisionamento com configurações multivariadas

Siga estas etapas para criar um pacote de provisionamento com funcionalidades multivariadas.

  1. Compilar um pacote de provisionamento e configurar as personalizações que você deseja aplicar durante determinadas condições. Para obter mais informações, consulte Criar um pacote de provisionamento.

  2. Depois de configurar as definições, guarde o projeto.

  3. Abra a pasta do projeto e copie o arquivo customizations.xml para qualquer localização local.

  4. Use um editor de texto ou XML para abrir o arquivo customizations.xml.

    O arquivo customizations.xml mantém os metadados do pacote (incluindo o proprietário e a classificação do pacote) e as configurações que você configurou quando criou seu pacote de provisionamento. O nó Personalizações do arquivo contém uma seção Comum, que contém as configurações de personalização.

    O exemplo a seguir mostra o conteúdo de um arquivo customizations.xml de exemplo.

    <?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. Edite o ficheiro customizations.xml para criar uma secção Destinos para descrever as condições que processam as suas definições multivariantas.

    O exemplo seguinte mostra o customizations.xml, que é modificado para incluir várias condições, incluindo ProcessorName, ProcessorType, MCC e MNC.

    <?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. No arquivo customizations.xml, crie uma seção Variant para as configurações que você precisa personalizar. Para fazer isso:

    a. Defina um elemento filho TargetRefs. b. Dentro do elemento TargetRefs, defina um elemento TargetRef. É possível definir vários elementos TargetRef para cada Id que você precisa aplicar a configurações personalizadas. c. Mova configurações compatíveis da seção Common para a seção Variant.

    Se qualquer um dos elementos TargetRef corresponder a Destino, todas as configurações de Variante serão aplicadas.

    Observação

    Você pode definir várias seções Variante. As configurações residentes na seção Comum são aplicadas incondicionalmente a todos os eventos de disparo.

    O exemplo seguinte mostra o customizations.xml atualizado para incluir uma secção Variante e as definições movidas que são aplicadas se as condições da variante forem cumpridas.

    <?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. Salve o arquivo customizations.xml atualizado e anote o caminho do arquivo atualizado. Precisará do caminho como um dos valores para o próximo passo.

  8. Use a interface de linha de comando do Designer de Configuração do Windows para criar um pacote de provisionamento usando o arquivo customizations.xml atualizado.

    Por exemplo:

    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"
    

Neste exemplo, o StoreFile corresponde à localização do arquivo de definições que é utilizado para criar o pacote para a edição necessária do Windows.

Observação

O pacote de aprovisionamento criado durante este passo contém as definições multivariantas. É possível usar esse pacote como um pacote autônomo que pode aplicar a um dispositivo Windows ou usá-lo como base ao iniciar outro projeto.

Eventos que disparam provisionamento

Quando instala o pacote de aprovisionamento multivarianto num dispositivo cliente Windows, o motor de aprovisionamento aplica as definições de condição correspondentes em todos os eventos e aciona o aprovisionamento.

Os seguintes eventos acionam o aprovisionamento em dispositivos cliente Windows:

Evento Cliente Windows para edições de ambiente de trabalho
Inicialização do sistema Com suporte
Atualização do sistema operacional Planejado
Instalação do pacote durante a experiência de primeira execução do dispositivo Com suporte
Detecção de presença ou atualização de SIM Com suporte
Instalação do pacote em tempo de execução Com suporte
Roaming detectado Sem suporte