# Gruppenrichtlinien als ADMX-Dateien

Gültig für: Windows Vista | Server 2008 | Windows 7 | Windows 8 | Windows 10

Ab Windows Vista hat Microsoft die ADM-Dateien (siehe Tipp: Erstellen einer eigenen ADM - Datei) für die Gruppenrichtlinien durch ADMX-Dateien ersetzt. Die ADM-Dateien für Gruppenrichtlinien, die ab Windows NT eingeführt wurden, hatten einen textbasierten Aufbau, welcher jetzt auf ein XML-basiertes Format umgestellt wurde.

Gleichzeitig wurden die Gruppenrichtliniendateien in sprachneutrale (.admx-Dateien), welche im Verzeichnis "%systemroot%\PolicyDefinitions" abgelegt werden, sprachspezifisch aufgeteilt - zu finden unter "%systemroot%\PolicyDefinitions\[Sprachkürzel]" (z.B: für Deutsch "%systemroot%\PolicyDefinitions\de-DE"). Auch wurden die großen Gruppenrichtlinien in mehrere kleine Dateien aufgeteilt, so dass mit Windows Vista ca. 130-ADMX-Dateien ausgeliefert werden.

Dass Microsoft noch mehr auf die Gruppenrichtlinien gehen will, sieht man daran, dass die Gruppenrichtlinien-Verwaltungskonsole (GPMC.MSC), die früher noch als zusätzlicher Download geladen werden musste, jetzt mit Windows Vistagemeinsam ausgeliefert wird.

Die alten ADM-Dateien können weiterhin verwendet werden. Sie werden auch weiter im Verzeichnis "%systemroot%\inf" gespeichert. Hier können die alten angepassten ADM-Dateien abgelegt werden und werden in Gruppenrichtlinieneditor (GPEDIT.MSC) auch angezeigt. Diese Einstellungen werden im neuen Gruppenrichtlinieneditor im Unterordner "Klassische Administrative Vorlagen (ADM)" aufgelistet. Dabei werden die durch ADMX-Dateien ersetzten ADM-Dateien nicht mehr angezeigt. Dabei handelt es sich z.B. um die Dateien SYSTEM.ADM, CONF.ADM, WUAU:ADM, INETRES.ADM usw. Anpassungen in diesen Dateien werden ignoriert und müssen in den neuen ADMX-Dateien durchgeführt werden.

In einer Windows-Domäne können die ADMX-Dateien auch über eine zentrale Stelle verwaltet werden. Die Dateien werden vom Gruppenrichtlinieneditor aus dem SYSVOL-Ordner (%systemroot%\sysvol\domain\policies\PolicyDefinitions) eines Domänencontrollers gelesen. Nur wenn dieser Speicherort nicht verfügbar ist, werden die lokal gespeicherten Dateien verwendet.

Der zentrale Speicherort lässt sich nicht konfigurieren. Das Ablegen der Datei im SYSVOL kann auch schon auf einen Windows 2000 Server gemacht werden, und somit kann diese Funktion auch schon jetzt benutzt werden. Die neuen ADMX-Dateien können aber nur von Windows Vista genutzt werden.

### Übersicht der Speicherorte von Gruppenrichtlinien:

Gruppenrichtliniendatei | Speicherort
--- | ---
AMD-Dateien | %systemroot%\inf
ADMX-Dateien (lokal) | %systemroot%\policyDefinitions
ADML-Dateien (lokal) | %systemroot%\policyDefinitions\[Sprachkürzel]
ADMX-Dateien (Domäne) | %systemroot%\sysvol\domain\policies\PolicyDefinitions
ADML-Dateien (Domäne) | %systemroot%\sysvol\domain\policies\PolicyDefinitions\[Sprachkürzel]

Einstellungen werden in den Gruppenrichtlinen vorgenommen mit:

lokale Gruppenrichtlinien: GPEDIT.MSC

Domänen Gruppenrichtlinien: GPMC.MSC

## Aufbau der neuen ADMX-Dateien

Wer schon mit den alten ADM-Dateien gearbeitet hat, wird mit dem neuen Format schnell zurechtkommen. Wichtig ist, dass man sich an die Trennung von sprachunabhängigen und sprachabhängigen Bestandteilen hält. Am Einfachsten lassen sich ADMX-Dateien mit dem Tool "ADMX-Migrator" (Link siehe unten) bauen und bearbeiten.

### Sprachunabhängiger Teil:

Anhand der Datei "AddRemovePrograms.admx" wird der grundlegende neue Aufbau der ADMX-Dateien beschrieben.

Der Kopf (Header) jeder ADMX-Datei hat immer den gleichen Aufbau. Hier wird der allgemeine Namespaces für die Richtliniendateien festgelegt:

<?xml version="1.0" encoding="utf-8"?> <!-- (c) 2006 Microsoft Corporation --> <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">

Im zweiten Teil werden die Präfixe der spezifischen Namespaces festgelegt:

<policyNamespaces> <target prefix="addremoveprograms" namespace="Microsoft.Policies.AddRemovePrograms" /> <using prefix="windows" namespace="Microsoft.Policies.Windows" /> </policyNamespaces>

Wenn Sie eine eigene ADMX-Datei erstellen, müssen Sie sich einen neuen Namespace erstellen.

Dazu tauschen Sie die Zeile "<target prefix="addremoveprograms" namespace="Microsoft.Policies.AddRemovePrograms" />" durch folgenden Eintrag aus: "<target prefix="winfaq" namespace="winfaq.Policies.[UID/Name]" />".

Für [UID/Name] tragen Sie eine eindeutigen Namen ein (z.B.: 5B9B8C06_291A_4772_8D7A_9ECA8318C51F).

Anschließend wird die Version festgelegt. Diese Version wird überprüft, um zu erkennen, ob diese Richtlinie überhaupt verarbeitet werden kann. Die aktuelle Windows Vista Version fängt mit der Nummer 1.0 an. Bei späteren Erweiterungen der ADMX-Spezifikation wird sich diese Nummer entsprechend erhöhen:

<resources minRequiredRevision="1.0" />

In dem nächsten Bereich werden die Kategorien der Gruppenrichtlinien festgelegt, unter dem die einzelnen Einträge angezeigt werden sollen. Hier wird auch über „$(string.Arp)“ auf einen sprachspezifischen Teil der Richtlinien verwiesen (siehe unten „Sprachabhängiger Teil“), welcher in der Datei "AddRemovePrograms.adml" abgelegt wird.

<categories> <category name="Arp" displayName="$(string.Arp)"> <parentCategory ref="windows:ControlPanel" /> </category> </categories>

Der Eintrag "parentCategory" legt die übergeordnete Kategorie fest, wo dieser Eintrag zusätzlich eingefügt wird. Im unteren Bild sehen Sie, wo diese Einträge in GPEdit und im ADMX-Migrator angezeigt werden.

Hier kann mehr als eine Kategorie angelegt werden. Die einzelnen Kategorien werden durch den Tag<category name="[Name]" displayName="$(string.[Name])"> und </category> eingeschlossen.

Jetzt kommt der Hauptteil der Gruppenrichtlinien, wo die einzelnen Tipps/Einstellungen festgelegt werden.

<policies> <policy name="DefaultCategory" class="User" displayName="$(string.DefaultCategory)" explainText="$(string.DefaultCategory_Help)" presentation="$(presentation.DefaultCategory)" key="Software\Microsoft\Windows\CurrentVersion\Policies\Uninstall"> <parentCategory ref="Arp" /> <supportedOn ref="windows:SUPPORTED_WindowsPreVista" /> <elements> <text id="DefaultCategoryBox" valueName="DefaultCategory" required="true" /> </elements> </policy> [Weitere Einträge…] </policies>

Innerhalb des Tags <policies>… </policies> können Sie beliebig viele Einträge hinzufügen. Jeder Eintrag wird über die Tags <policy> und </policy> eingeschlossen.

Es gibt jeweils verschieden Anzeigemöglichkeiten, wie die Tipps im Gruppenrichtlinieneditor angezeigt werden. Diese Darstellungen werden hier kurz beschrieben. Vorab werden die Parameter gezeigt, die bei jedem Eintrag vorkommen.

policy name= | Legt den internen Namen für diesen Tipp in der ADMX-Datei fest
class= | Legt fest im welchen Bereich der Tipp angezeigt werden soll. Dabei sind folgende Werte möglich: User -> Der Tipp wird unter "Benutzerkonfiguration" angezeigt (HKCU) Computer -> Der Tipp wird unter "Computerkonfiguration" angezeigt (HKLM)
displayName= | Legt den Anzeigenamen in der Gruppenpolicy fest
explainText= | Legt den Beschreibungstext für den Tipp fest
key= | Legt den Pfad in der Registry zum Eintrag fest
Optional: valueName= | Legt den Namen des Schlüssels fest der geändert/gesetzt werden soll. Bei einigen Anzeigearten (siehe weiter unten, wird dieser Wert nicht angegeben).
<parentCategory ref="[Name]" /> | Hier wird die Kategorie festgelegt unter dem der Tipp angezeigt werden soll. Die möglichen Einträge werden wie oben beschrieben unter "<categories>" konfiguriert.
<supportedOn ref="windows:SUPPORTED_WindowsPreVista" /> | Legt das Betriebssystem fest für die der Tipp gültig ist. Hier Beispiele für mögliche Werte: SUPPORTED_Win2k SUPPORTED_Win2kOnly SUPPORTED_Win2kSP1 SUPPORTED_Win2kSP3 SUPPORTED_WindowsXP SUPPORTED_WindowsXPOnly SUPPORTED_WindowsXPOrServerOnly SUPPORTED_WindowsXPSP2 SUPPORTED_WindowsXPSP2_Or_WindowsNET SUPPORTED_WindowsXPSP2_Or_WindowsNETSP1 SUPPORTED_WindowsXP_SP2_W2K_SP5_NETSERVER_SP1 SUPPORTED_WindowsXPWindowsNETorBITS15" SUPPORTED_WindowsXPSP2WindowsNETSP1orBITS20 SUPPORTED_WindowsPreVista SUPPORTED_WindowsVista SUPPORTED_WindowsNET_XP SUPPORTED_NetMeeting3 SUPPORTED_IE4ONLY SUPPORTED_IE5 SUPPORTED_IE5_NONVISTA SUPPORTED_IE5_6 SUPPORTED_IE6SRVSP1 SUPPORTED_IE6SRVSP1ONLY SUPPORTED_IE6SRVSP1_NONVISTA SUPPORTED_IE6SP2 SUPPORTED_IE6ONLY SUPPORTED_IE7 SUPPORTED_IE7Vista SUPPORTED_IE7_NONVISTA

#### Eintrag zum aktivieren/deaktivieren

<policy name="NoAddFromCDorFloppy" class="User" displayName="$(string.NoAddFromCDorFloppy)" explainText="$(string.NoAddFromCDorFloppy_Help)" key="Software\Microsoft\Windows\CurrentVersion\Policies\Uninstall" valueName="NoAddFromCDorFloppy"> <parentCategory ref="Arp" /> <supportedOn ref="windows:SUPPORTED_WindowsPreVista" /> </policy>

Die hier benutzten Einträge wurden oben schon beschrieben. Dieses ist die am meisten benutzte Konfiguration und bietet die einfache Möglichkeit, einen Eintrag zu aktivieren/deaktivieren. In der nächsten erweiterten Form werden noch die Werte angegeben, die in jeweiligen Zustand in die Registry geschrieben werden sollen:

<policy name="NoMyComputerIcon" class="User" displayName="$(string.NoMyComputerIcon)" explainText="$(string.NoMyComputerIcon_Help)" key="Software\Microsoft\Windows\CurrentVersion\Policies\NonEnum" valueName="{20D04FE0-3AEA-1069-A2D8-08002B30309D}"> <parentCategory ref="windows:Desktop" /> <supportedOn ref="windows:SUPPORTED_WindowsXP" /> <enabledValue> <decimal value="1" /> </enabledValue> <disabledValue> <decimal value="0" /> </disabledValue> </policy>

#### Eintrag mit Texteingabe

<policies> <policy name="DefaultCategory" class="User" displayName="$(string.DefaultCategory)" explainText="$(string.DefaultCategory_Help)" presentation="$(presentation.DefaultCategory)" key="Software\Microsoft\Windows\CurrentVersion\Policies\Uninstall"> <parentCategory ref="Arp" /> <supportedOn ref="windows:SUPPORTED_WindowsPreVista" /> <elements> <text id="DefaultCategoryBox" valueName="DefaultCategory" required="true" /> </elements> </policy> [Weitere Einträge…] </policies>

Bei dieser Art von Policy wird der Eintrag ValueName nicht in der oberen Konfiguration angegeben. Die möglichen Elemente innerhalb der unteren Box werden im Bereich <elements> abgelegt. Für eine Eingabebox wird dafür folgender Eintrag verwendet:

text id= | Legt den internen Namen für diesen Tipp in der ADMX-Datei fest
valueName= | Legt den Namen des Schlüssels fest der geändert/gesetzt werden soll
required= | Legt fest ob dieser Eintrag bei der Eingabe gefüllt werden muss. Die möglichen Wert sind: true -> Eingabe erforderlich false -> Wert kann leer bleiben.

#### Auswahlbox

<policy name="LockUserUILanguage" class="User" displayName="$(string.LockUserUILanguage)" explainText="$(string.LockUserUILanguage_Help)" presentation="$(presentation.LockUserUILanguage)" key="Software\Policies\Microsoft\Control Panel\Desktop"> <parentCategory ref="RegionalOptions" /> <supportedOn ref="windows:SUPPORTED_WindowsVista" /> <elements> <enum id="UILangSelect" valueName="PreferredUILanguages" required="true"> <item displayName="$(string.UILang1)"> <value> <string>en-US</string> </value> </item> [Für jede weitere Auswahlmöglichkeit jeweils ein <item> Eintrag hinzufügen] </enum> </elements> </policy>

Bei diesem Tipp werden dem Anwender bestimmte Möglichkeiten zur Auswahl vorgegeben. In Beispiel wird nur ein Eintrag angegeben, durch weitere Blöcke können Sie diese Liste erweitern.

enum id= | Legt fest, dass es sich um eine Listbox handelt. Hier wird der interne Name im ADMX-File angegeben
valueName= | Legt den Namen des Schlüssels fest, der geändert/gesetzt werden soll
required= | Legt fest ob dieser Eintrag bei der Eingabe gefüllt werden muss. Die möglichen Wert sind: true -> Eingabe erforderlich false -> Wert kann leer bleiben.
item displayName= | Für jede mögliche Auswahl ein Eintrag. Hier wird der Test angegeben, der zur Auswahl angezeigt werden soll.
<value></value> | Dazwischen wird der Wert festgelegt, der bei der Auswahl gesetzt werden soll.
<string>[Text]</string> | Hier wird der Wert angegeben, der bei der Auswahl in der Registry eingetragen wird.

#### Zahlenwerte

<policy name="AD_QueryLimit" class="User" displayName="$(string.AD_QueryLimit)" explainText="$(string.AD_QueryLimit_Help)" presentation="$(presentation.AD_QueryLimit)" key="Software\Policies\Microsoft\Windows\Directory UI"> <parentCategory ref="ActiveDirectory" /> <supportedOn ref="windows:SUPPORTED_Win2k" /> <elements> <decimal id="AD_QueryLimit_Box" valueName="QueryLimit" required="true" maxValue="4000000000" /> </elements> </policy>

Erstellt eine Textbox für die Zahleneingabe. Es werden nur Zahlenwerte in dieser Box zugelassen. Weiterhin kann ein minimaler und maximaler Wert festgelegt werden.

decimal id= | Legt fest das es sich um eine Zahlenbox handelt. Hier wird der interne Name im ADMX-File angegeben
valueName= | Legt den Namen des Schlüssels fest der geändert/gesetzt werden soll
required= | Legt fest ob dieser Eintrag bei der Eingabe gefüllt werden muss. Die möglichen Wert sind: true -> Eingabe erforderlich false -> Wert kann leer bleiben.
Optional: minValue= | Legt den minimalen Wert fest
Optional: maxValue= | Legt den maximalen Wert fest

#### Checkbox

<policy name="LimitSize" class="User" displayName="$(string.LimitSize)" explainText="$(string.LimitSize_Help)" presentation="$(presentation.LimitSize)" key="Software\Microsoft\Windows\CurrentVersion\Policies\System" valueName="EnableProfileQuota"> <parentCategory ref="UserProfiles" /> <supportedOn ref="windows:SUPPORTED_Win2k" /> <elements> <text id="SizeMessage" valueName="ProfileQuotaMessage" /> <decimal id="ProfileSize" valueName="MaxProfileSize" required="true" minValue="300" maxValue="30000000" /> <boolean id="IncludeRegInProQuota" valueName="IncludeRegInProQuota" /> <boolean id="WarnUser" valueName="WarnUser" /> <decimal id="WarnUserTimeout" valueName="WarnUserTimeout" required="true" /> </elements> </policy>

Diesen Beispiel enthält nicht nur Checkboxen sondern auch ein paar anderen Elemente die schon weiter oben beschrieben wurden. Es wird hier gezeigt wie die unterschiedlichen Elemente kombiniert werden können.

boolean id= | Legt fest, dass es sich um eine Checkbox handelt. Hier wird der interne Name im ADMX-File angegeben
valueName= | Legt den Namen des Schlüssels fest, der geändert/gesetzt werden soll

#### Listwerte

<policy name="Pol_AssignedOfflineFiles_1" clientExtension="{C631DF4C-088F-4156-B058-4375F0853CD8}" class="User" displayName="$(string.Pol_AssignedOfflineFiles)" explainText="$(string.Pol_AssignedOfflineFiles_Help)" presentation="$(presentation.Pol_AssignedOfflineFiles_1)" key="Software\Policies\Microsoft\Windows\NetCache"> <parentCategory ref="Cat_OfflineFiles" /> <supportedOn ref="windows:SUPPORTED_Win2k" /> <elements> <list id="Lbl_AssignedOfflineFilesList" key="Software\Policies\Microsoft\Windows\NetCache\AssignedOfflineFolders" additive="true" explicitValue="true" /> </elements> </policy>

<elements> <list id="DisallowAppsList" key="Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\DisallowRun" valuePrefix="" /> </elements>

list id= | Legt fest, dass es sich um eine Listbox handelt. Hier wird der interne Name im ADMX-File angegeben
key= | Legt den Pfad in der Registry zum Eintrag fest
additive= | Ist der Wert "True", werden die vorhandenen Unterschlüssel nicht gelöscht und die Einträge werden hinzugefügt. Ist der Wert auf "False", werden die vorhandenen Unterschlüssel gelöscht.
explicitValue= | Ist der Wert "True", wird eine Tabelle mit zwei Spalten angezeigt. Der Anwender muss den Schlüsselnamen und den Wert eingeben. Ist der Wert "False", muss der Anwender nur den Wert eingeben, der Schlüsselname wird automatisch gebildet.
valuePrefix="" | Legt den Präfix für den Registryeintrag fest, der entsprechend hochgezählt wird.

Abschluss der XML-Datei:

</policyDefinitions>

### Sprachabhängiger Teil:

Hier wird die Datei "AddRemovePrograms.adml" als Beispiel für eine entsprechende Beschreibung verwendet.

Der Kopf (Header) jeder ADML-Datei hat immer den gleichen Aufbau wie die ADMX-Datei. Hier wird der allgemeine Namespaces für die Richtliniendateien festgelegt:

<?xml version="1.0" encoding="utf-8"?> <!-- (c) 2006 Microsoft Corporation --> <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>Anzeigenamen hier eingeben</displayName> <description>Beschreibung hier eingeben</description>

Sprachtexte in der String-Tabelle:

<resources> <stringTable> <string id="Arp">Software</string> <string id="DefaultCategory">Standardkategorie für "Neue Programme hinzufügen" festlegen</string> [weitere Einträge….] </stringTable>

Sprachdateien in der Presentation-Tabelle:

<presentationTable> <presentation id="DefaultCategory"> <textBox refId="DefaultCategoryBox"> <label>Kategorie:</label> </textBox> </presentation> [weitere Einträge….] </presentationTable>

Abschluss der XML-Datei:

</resources> </policyDefinitionResources>

## Tools für die ADMX-Dateien

#### ADMX-Migrator:

Mit dem kostenlosen Tool können Sie bestehende, alte ADM-Dateien in ADMX-Dateien konvertieren. Weiterhin werden Sie bei der Erstellung eigener ADMX-Dateien unterstützt:

Download:

http://www.microsoft.com/downloads/details.aspx?FamilyId=0F1EEC3D-10C4-4B5F-9625-97C2F731090C&displaylang=en

#### XML Notepad 2007:

Einfacher XML-Editor zum Bearbeiten von ADMX-Dateien.

Download:

http://www.microsoft.com/downloads/details.aspx?familyid=72d6aa49-787d-4118-ba5f-4f30fe913628&displaylang=en

WinFAQ: Startseite | WinFAQ: HTMLMenü | WinFAQ: Java Version

Der Tipp enthält einen Fehler oder Sie haben noch eine Ergänzung dafür? Schreiben Sie uns über die Feedback-Seite an: Feedback-Formular

URL: http://www.winfaq.de/faq_html/Content/tip2000/tip2480.htm

WinFAQ ® Version 9.01 Copyright © 1996/2016 by Frank Ullrich