Les modèles d’administration dans la stratégie de groupe vous permettent de gérer les paramètres basés sur le registre sur les ordinateurs d’un domaine Active Directory. Bien que Windows inclue des centaines de modèles intégrés, vous pouvez avoir besoin de modèles personnalisés pour gérer les paramètres d’applications tierces ou de votre propre logiciel interne. Ce guide couvre à la fois le format hérité ADM et le format moderne ADMX/ADML.

Comprendre les modèles d’administration

Les modèles d’administration définissent des paramètres de stratégie basés sur le registre que l’Éditeur de stratégie de groupe affiche dans une interface structurée et conviviale. Lorsqu’un administrateur active un paramètre de stratégie, la stratégie de groupe écrit la valeur de registre correspondante sur l’ordinateur ou le profil utilisateur cible lors du prochain cycle de rafraîchissement de stratégie.

Concepts clés

  • Fichiers ADMX : Fichiers de modèle basés sur XML qui définissent les paramètres de stratégie, les clés de registre et les éléments de l’interface utilisateur. Ils sont neutres en termes de langue.
  • Fichiers ADML : Fichiers de ressources spécifiques à la langue qui fournissent les chaînes d’affichage (noms, descriptions, texte d’aide) pour les paramètres définis dans les fichiers ADMX.
  • Clé Policies : Les paramètres écrits sous HKLM\SOFTWARE\Policies ou HKCU\SOFTWARE\Policies sont de véritables paramètres de stratégie de groupe qui sont appliqués et supprimés lorsque la stratégie ne s’applique plus.
  • Préférences (paramètres tatouage) : Les paramètres écrits en dehors de la clé Policies persistent dans le registre même après la suppression du GPO.

Le Magasin central

Avant de créer des modèles personnalisés, configurez le Magasin central pour que tous les administrateurs utilisent les mêmes fichiers de modèle.

Création du Magasin central

  1. Sur un contrôleur de domaine, naviguez vers \\<domaine>\SYSVOL\<domaine>\Policies\.
  2. Créez un dossier nommé PolicyDefinitions.
  3. Copiez tous les fichiers ADMX de C:\Windows\PolicyDefinitions\ d’une machine Windows dans ce dossier.
  4. Copiez les sous-dossiers de langue (par exemple, en-US) avec leurs fichiers ADML également.
# 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

Une fois le Magasin central créé, l’Éditeur de stratégie de groupe charge automatiquement les modèles depuis celui-ci au lieu de la machine locale.

Créer un modèle ADMX personnalisé

Voici un exemple complet d’un fichier ADMX personnalisé qui gère les paramètres d’application.

Fichier 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>

Fichier 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>

Déployer le modèle personnalisé

Dans le Magasin central

  1. Copiez MyAppPolicy.admx vers \\<domaine>\SYSVOL\<domaine>\Policies\PolicyDefinitions\.
  2. Copiez MyAppPolicy.adml vers \\<domaine>\SYSVOL\<domaine>\Policies\PolicyDefinitions\en-US\.

Sur une machine locale (pour les tests)

  1. Copiez MyAppPolicy.admx vers C:\Windows\PolicyDefinitions\.
  2. Copiez MyAppPolicy.adml vers C:\Windows\PolicyDefinitions\en-US\.

Tester le modèle personnalisé

  1. Ouvrez l’Éditeur de stratégie de groupe (gpedit.msc pour local ou via GPMC pour les stratégies de domaine).
  2. Naviguez vers Configuration ordinateur > Modèles d’administration (ou Configuration utilisateur pour les stratégies de portée utilisateur).
  3. Trouvez votre catégorie personnalisée (“My Application” dans l’exemple ci-dessus).
  4. Ouvrez un paramètre de stratégie et vérifiez que la description, les options et le texte d’aide s’affichent correctement.
  5. Activez le paramètre et vérifiez que la valeur de registre est créée :
# Verify the registry value was set
Get-ItemProperty -Path "HKLM:\SOFTWARE\Policies\MyCompany\MyApp" -Name "EnableAutoUpdate"

Format ADM hérité

Pour les environnements utilisant encore Windows Server 2003 ou gérant des modèles hérités, voici un exemple simple d’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

Enregistrez-le en tant que fichier .adm et ajoutez-le via l’Éditeur de stratégie de groupe en faisant un clic droit sur Modèles d’administration et en sélectionnant Ajouter/Supprimer des modèles.

Bonnes pratiques

  • Utilisez toujours le chemin de la clé Policies (SOFTWARE\Policies\...) pour que les paramètres soient supprimés lorsque le GPO est délié.
  • Utilisez le format ADMX/ADML pour les nouveaux modèles. Le format ADM hérité est obsolète.
  • Utilisez le Magasin central pour la cohérence entre tous les administrateurs.
  • Incluez un texte d’explication détaillé pour que les autres administrateurs comprennent ce que fait chaque paramètre.
  • Versionnez vos modèles en incrémentant l’attribut de révision lors des modifications.
  • Testez dans un laboratoire avant de déployer dans les OU de production.

Résumé

Les modèles d’administration personnalisés étendent la stratégie de groupe pour gérer les paramètres basés sur le registre de n’importe quelle application. Le format moderne ADMX/ADML utilise XML pour définir les paramètres de stratégie (ADMX) et les chaînes d’affichage localisées (ADML). Déployez les modèles dans le Magasin central dans SYSVOL pour une disponibilité à l’échelle du domaine, ou dans le dossier local PolicyDefinitions pour les tests. Écrivez toujours les paramètres sous la clé de registre Policies pour qu’ils soient correctement appliqués et supprimés par la stratégie de groupe, et testez les modèles minutieusement avant de les déployer dans des environnements de production.