Os modelos administrativos na Política de Grupo permitem gerenciar configurações baseadas no registro em computadores de um domínio Active Directory. Embora o Windows inclua centenas de modelos integrados, você pode precisar de modelos personalizados para gerenciar configurações de aplicativos de terceiros ou seu próprio software interno. Este guia cobre tanto o formato legado ADM quanto o formato moderno ADMX/ADML.

Compreendendo os modelos administrativos

Os modelos administrativos definem configurações de política baseadas no registro que o Editor de Política de Grupo exibe em uma interface estruturada e amigável. Quando um administrador habilita uma configuração de política, a Política de Grupo escreve o valor de registro correspondente no computador ou perfil de usuário de destino durante o próximo ciclo de atualização de política.

Conceitos-chave

  • Arquivos ADMX: Arquivos de modelo baseados em XML que definem as configurações de política, chaves de registro e elementos da interface do usuário. São neutros em relação ao idioma.
  • Arquivos ADML: Arquivos de recursos específicos do idioma que fornecem as strings de exibição (nomes, descrições, texto de ajuda) para as configurações definidas nos arquivos ADMX.
  • Chave Policies: Configurações escritas sob HKLM\SOFTWARE\Policies ou HKCU\SOFTWARE\Policies são configurações verdadeiras de Política de Grupo que são aplicadas e removidas quando a política não se aplica mais.
  • Preferências (configurações tatuagem): Configurações escritas fora da chave Policies persistem no registro mesmo após o GPO ser removido.

O Repositório Central

Antes de criar modelos personalizados, configure o Repositório Central para que todos os administradores usem os mesmos arquivos de modelo.

Criando o Repositório Central

  1. Em um controlador de domínio, navegue até \\<domínio>\SYSVOL\<domínio>\Policies\.
  2. Crie uma pasta chamada PolicyDefinitions.
  3. Copie todos os arquivos ADMX de C:\Windows\PolicyDefinitions\ em uma máquina Windows para esta pasta.
  4. Copie as subpastas de idioma (por exemplo, en-US) com seus arquivos ADML também.
# Create Central Store and copy templates
$sysvolPath = "\\contoso.com\SYSVOL\contoso.com\Policies\PolicyDefinitions"
New-Item -Path $sysvolPath -ItemType Directory -Force

# Copy ADMX files
Copy-Item "C:\Windows\PolicyDefinitions\*.admx" -Destination $sysvolPath

# Copy language files
$langPath = Join-Path $sysvolPath "en-US"
New-Item -Path $langPath -ItemType Directory -Force
Copy-Item "C:\Windows\PolicyDefinitions\en-US\*.adml" -Destination $langPath

Uma vez que o Repositório Central existe, o Editor de Política de Grupo carrega automaticamente os modelos a partir dele em vez da máquina local.

Criando um modelo ADMX personalizado

Aqui está um exemplo completo de um arquivo ADMX personalizado que gerencia configurações de aplicativo.

Arquivo ADMX (MyAppPolicy.admx)

<?xml version="1.0" encoding="utf-8"?>
<policyDefinitions
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    revision="1.0"
    schemaVersion="1.0"
    xmlns="http://schemas.microsoft.com/GroupPolicy/2006/07/PolicyDefinitions">

  <policyNamespaces>
    <target prefix="myapp" namespace="MyCompany.Policies.MyApp" />
    <using prefix="windows" namespace="Microsoft.Policies.Windows" />
  </policyNamespaces>

  <resources minRequiredRevision="1.0" />

  <categories>
    <category name="MyApp" displayName="$(string.MyApp_Category)">
      <parentCategory ref="windows:System" />
    </category>
    <category name="MyApp_Security" displayName="$(string.MyApp_Security_Category)">
      <parentCategory ref="MyApp" />
    </category>
  </categories>

  <policies>
    <!-- Enable or disable automatic updates -->
    <policy name="AutoUpdate"
            class="Machine"
            displayName="$(string.AutoUpdate_Name)"
            explainText="$(string.AutoUpdate_Help)"
            key="SOFTWARE\Policies\MyCompany\MyApp"
            valueName="EnableAutoUpdate">
      <parentCategory ref="MyApp" />
      <supportedOn ref="windows:SUPPORTED_Windows7" />
      <enabledValue><decimal value="1" /></enabledValue>
      <disabledValue><decimal value="0" /></disabledValue>
    </policy>

    <!-- Configure update server URL -->
    <policy name="UpdateServer"
            class="Machine"
            displayName="$(string.UpdateServer_Name)"
            explainText="$(string.UpdateServer_Help)"
            presentation="$(presentation.UpdateServer_Presentation)"
            key="SOFTWARE\Policies\MyCompany\MyApp">
      <parentCategory ref="MyApp" />
      <supportedOn ref="windows:SUPPORTED_Windows7" />
      <elements>
        <text id="UpdateServerURL" valueName="UpdateServerURL" required="true" />
      </elements>
    </policy>

    <!-- Configure session timeout -->
    <policy name="SessionTimeout"
            class="User"
            displayName="$(string.SessionTimeout_Name)"
            explainText="$(string.SessionTimeout_Help)"
            presentation="$(presentation.SessionTimeout_Presentation)"
            key="SOFTWARE\Policies\MyCompany\MyApp">
      <parentCategory ref="MyApp_Security" />
      <supportedOn ref="windows:SUPPORTED_Windows7" />
      <elements>
        <decimal id="TimeoutMinutes" valueName="SessionTimeoutMinutes"
                 minValue="5" maxValue="480" />
      </elements>
    </policy>

    <!-- Configure logging level dropdown -->
    <policy name="LogLevel"
            class="Machine"
            displayName="$(string.LogLevel_Name)"
            explainText="$(string.LogLevel_Help)"
            presentation="$(presentation.LogLevel_Presentation)"
            key="SOFTWARE\Policies\MyCompany\MyApp">
      <parentCategory ref="MyApp" />
      <supportedOn ref="windows:SUPPORTED_Windows7" />
      <elements>
        <enum id="LogLevelDropdown" valueName="LogLevel">
          <item displayName="$(string.LogLevel_Error)">
            <value><decimal value="1" /></value>
          </item>
          <item displayName="$(string.LogLevel_Warning)">
            <value><decimal value="2" /></value>
          </item>
          <item displayName="$(string.LogLevel_Info)">
            <value><decimal value="3" /></value>
          </item>
          <item displayName="$(string.LogLevel_Debug)">
            <value><decimal value="4" /></value>
          </item>
        </enum>
      </elements>
    </policy>
  </policies>
</policyDefinitions>

Arquivo ADML (en-US/MyAppPolicy.adml)

<?xml version="1.0" encoding="utf-8"?>
<policyDefinitionResources
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    revision="1.0"
    schemaVersion="1.0"
    xmlns="http://schemas.microsoft.com/GroupPolicy/2006/07/PolicyDefinitions">

  <displayName>My Application Policy</displayName>
  <description>Administrative template for managing My Application settings.</description>

  <resources>
    <stringTable>
      <string id="MyApp_Category">My Application</string>
      <string id="MyApp_Security_Category">Security Settings</string>
      <string id="AutoUpdate_Name">Enable automatic updates</string>
      <string id="AutoUpdate_Help">Controls whether the application checks for and installs updates automatically.

If you enable this setting, the application will check for updates on startup.
If you disable this setting, automatic updates are turned off.
If you do not configure this setting, the user can choose.</string>
      <string id="UpdateServer_Name">Configure update server URL</string>
      <string id="UpdateServer_Help">Specifies the URL of the internal update server.

If you enable this setting, the application will check the specified server for updates instead of the default public server.</string>
      <string id="SessionTimeout_Name">Configure session timeout</string>
      <string id="SessionTimeout_Help">Sets the session timeout in minutes. The user will be logged out after this period of inactivity.

Valid range: 5 to 480 minutes.</string>
      <string id="LogLevel_Name">Configure logging level</string>
      <string id="LogLevel_Help">Sets the verbosity of application logging.

Error: Only errors are logged.
Warning: Errors and warnings are logged.
Info: General information, warnings, and errors are logged.
Debug: All messages including debug details are logged.</string>
      <string id="LogLevel_Error">Error</string>
      <string id="LogLevel_Warning">Warning</string>
      <string id="LogLevel_Info">Information</string>
      <string id="LogLevel_Debug">Debug</string>
    </stringTable>
    <presentationTable>
      <presentation id="UpdateServer_Presentation">
        <textBox refId="UpdateServerURL">
          <label>Update Server URL:</label>
        </textBox>
      </presentation>
      <presentation id="SessionTimeout_Presentation">
        <decimalTextBox refId="TimeoutMinutes" defaultValue="30">
          Timeout (minutes):
        </decimalTextBox>
      </presentation>
      <presentation id="LogLevel_Presentation">
        <dropdownList refId="LogLevelDropdown" defaultItem="0">
          Logging Level:
        </dropdownList>
      </presentation>
    </presentationTable>
  </resources>
</policyDefinitionResources>

Implantando o modelo personalizado

No Repositório Central

  1. Copie MyAppPolicy.admx para \\<domínio>\SYSVOL\<domínio>\Policies\PolicyDefinitions\.
  2. Copie MyAppPolicy.adml para \\<domínio>\SYSVOL\<domínio>\Policies\PolicyDefinitions\en-US\.

Em uma máquina local (para testes)

  1. Copie MyAppPolicy.admx para C:\Windows\PolicyDefinitions\.
  2. Copie MyAppPolicy.adml para C:\Windows\PolicyDefinitions\en-US\.

Testando o modelo personalizado

  1. Abra o Editor de Política de Grupo (gpedit.msc para local ou através do GPMC para políticas de domínio).
  2. Navegue até Configuração do Computador > Modelos Administrativos (ou Configuração do Usuário para políticas de escopo do usuário).
  3. Encontre sua categoria personalizada (“My Application” no exemplo acima).
  4. Abra uma configuração de política e verifique se a descrição, opções e texto de ajuda são exibidos corretamente.
  5. Habilite a configuração e verifique se o valor de registro é criado:
# Verify the registry value was set
Get-ItemProperty -Path "HKLM:\SOFTWARE\Policies\MyCompany\MyApp" -Name "EnableAutoUpdate"

Formato ADM legado

Para ambientes que ainda usam Windows Server 2003 ou gerenciam modelos legados, aqui está um exemplo simples de ADM:

CLASS USER
CATEGORY "Desktop Settings"
  KEYNAME "SOFTWARE\Policies\System"
  POLICY "Disable Autoplay Feature"
    EXPLAIN "This policy disables the autoplay feature on selected drives."
    PART "Disable autoplay on" DROPDOWNLIST REQUIRED
      VALUENAME "NoDriveTypeAutoRun"
      ITEMLIST
        NAME "CD-ROM drives" VALUE NUMERIC 181 DEFAULT
        NAME "All drives" VALUE NUMERIC 255
      END ITEMLIST
    END PART
  END POLICY
END CATEGORY

Salve como um arquivo .adm e adicione-o através do Editor de Política de Grupo clicando com o botão direito em Modelos Administrativos e selecionando Adicionar/Remover Modelos.

Melhores práticas

  • Sempre use o caminho da chave Policies (SOFTWARE\Policies\...) para que as configurações sejam removidas quando o GPO for desvinculado.
  • Use o formato ADMX/ADML para novos modelos. O formato ADM legado está obsoleto.
  • Use o Repositório Central para consistência entre todos os administradores.
  • Inclua texto explicativo detalhado para que outros administradores entendam o que cada configuração faz.
  • Versione seus modelos incrementando o atributo de revisão ao fazer alterações.
  • Teste em um laboratório antes de implantar em OUs de produção.

Resumo

Os modelos administrativos personalizados estendem a Política de Grupo para gerenciar configurações baseadas no registro de qualquer aplicativo. O formato moderno ADMX/ADML usa XML para definir configurações de política (ADMX) e strings de exibição localizadas (ADML). Implante os modelos no Repositório Central no SYSVOL para disponibilidade em todo o domínio, ou na pasta local PolicyDefinitions para testes. Sempre escreva configurações sob a chave de registro Policies para que sejam corretamente aplicadas e removidas pela Política de Grupo, e teste os modelos minuciosamente antes de implantá-los em ambientes de produção.