Las plantillas administrativas en la directiva de grupo le permiten administrar configuraciones basadas en el registro en equipos de un dominio de Active Directory. Aunque Windows incluye cientos de plantillas integradas, es posible que necesite plantillas personalizadas para administrar configuraciones de aplicaciones de terceros o su propio software interno. Esta guía cubre tanto el formato heredado ADM como el formato moderno ADMX/ADML.
Comprender las plantillas administrativas
Las plantillas administrativas definen configuraciones de directiva basadas en el registro que el Editor de directiva de grupo muestra en una interfaz estructurada y amigable. Cuando un administrador habilita una configuración de directiva, la directiva de grupo escribe el valor de registro correspondiente en el equipo o perfil de usuario de destino durante el siguiente ciclo de actualización de directivas.
Conceptos clave
- Archivos ADMX: Archivos de plantilla basados en XML que definen las configuraciones de directiva, claves de registro y elementos de la interfaz de usuario. Son independientes del idioma.
- Archivos ADML: Archivos de recursos específicos del idioma que proporcionan las cadenas de visualización (nombres, descripciones, texto de ayuda) para las configuraciones definidas en los archivos ADMX.
- Clave Policies: Las configuraciones escritas bajo
HKLM\SOFTWARE\PoliciesoHKCU\SOFTWARE\Policiesson configuraciones verdaderas de directiva de grupo que se aplican y se eliminan cuando la directiva ya no se aplica. - Preferencias (configuraciones tatuaje): Las configuraciones escritas fuera de la clave Policies persisten en el registro incluso después de que el GPO se elimine.
El Almacén central
Antes de crear plantillas personalizadas, configure el Almacén central para que todos los administradores usen los mismos archivos de plantilla.
Crear el Almacén central
- En un controlador de dominio, navegue a
\\<dominio>\SYSVOL\<dominio>\Policies\. - Cree una carpeta llamada
PolicyDefinitions. - Copie todos los archivos ADMX desde
C:\Windows\PolicyDefinitions\en una máquina Windows a esta carpeta. - Copie las subcarpetas de idioma (por ejemplo,
en-US) con sus archivos ADML también.
# 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
Una vez que el Almacén central existe, el Editor de directiva de grupo carga automáticamente las plantillas desde allí en lugar de la máquina local.
Crear una plantilla ADMX personalizada
Aquí hay un ejemplo completo de un archivo ADMX personalizado que administra configuraciones de aplicación.
Archivo 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>
Archivo 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>
Desplegar la plantilla personalizada
En el Almacén central
- Copie
MyAppPolicy.admxa\\<dominio>\SYSVOL\<dominio>\Policies\PolicyDefinitions\. - Copie
MyAppPolicy.admla\\<dominio>\SYSVOL\<dominio>\Policies\PolicyDefinitions\en-US\.
En una máquina local (para pruebas)
- Copie
MyAppPolicy.admxaC:\Windows\PolicyDefinitions\. - Copie
MyAppPolicy.admlaC:\Windows\PolicyDefinitions\en-US\.
Probar la plantilla personalizada
- Abra el Editor de directiva de grupo (
gpedit.mscpara local o a través de GPMC para directivas de dominio). - Navegue a Configuración del equipo > Plantillas administrativas (o Configuración del usuario para directivas de ámbito de usuario).
- Encuentre su categoría personalizada (“My Application” en el ejemplo anterior).
- Abra una configuración de directiva y verifique que la descripción, opciones y texto de ayuda se muestran correctamente.
- Habilite la configuración y verifique que el valor de registro se crea:
# Verify the registry value was set
Get-ItemProperty -Path "HKLM:\SOFTWARE\Policies\MyCompany\MyApp" -Name "EnableAutoUpdate"
Formato ADM heredado
Para entornos que todavía usan Windows Server 2003 o administran plantillas heredadas, aquí hay un ejemplo simple 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
Guárdelo como un archivo .adm y agréguelo a través del Editor de directiva de grupo haciendo clic derecho en Plantillas administrativas y seleccionando Agregar o quitar plantillas.
Mejores prácticas
- Siempre use la ruta de la clave Policies (
SOFTWARE\Policies\...) para que las configuraciones se eliminen cuando se desvincule el GPO. - Use el formato ADMX/ADML para plantillas nuevas. El formato ADM heredado está obsoleto.
- Use el Almacén central para consistencia entre todos los administradores.
- Incluya texto de explicación detallado para que otros administradores comprendan lo que hace cada configuración.
- Versione sus plantillas incrementando el atributo de revisión al hacer cambios.
- Pruebe en un laboratorio antes de desplegar en OUs de producción.
Resumen
Las plantillas administrativas personalizadas extienden la directiva de grupo para administrar configuraciones basadas en el registro de cualquier aplicación. El formato moderno ADMX/ADML usa XML para definir las configuraciones de directiva (ADMX) y las cadenas de visualización localizadas (ADML). Despliegue las plantillas en el Almacén central en SYSVOL para disponibilidad en todo el dominio, o en la carpeta local PolicyDefinitions para pruebas. Siempre escriba las configuraciones bajo la clave de registro Policies para que sean correctamente aplicadas y eliminadas por la directiva de grupo, y pruebe las plantillas minuciosamente antes de desplegarlas en entornos de producción.