Wednesday, April 16, 2014

GPOs in der Praxis (3): Skripts ausführen



Mit der Einführung der Group Policy Preferences in Windows Vista und Server 2008 können viele Aufgaben, für die Skripts erforderlich waren, jetzt direkt mit Gruppenrichtlinien realisiert werden. Dazu gehören insbesondere die Zuordnung von freigegebenen Netzwerkressourcen (Laufwerke und Drucker) oder Änderungen im Dateisystem (Ordner und Dateien kopieren, erstellen und löschen). Trotzdem werden Sie gelegentlich Anforderungen haben, die sich mit Gruppenrichtlinien nicht oder nur umständlich erfüllen lassen. Dann ist die Verwendung von Skripts erforderlich.
Das Erstellen von guten Skripts ist nicht Thema dieses Abschnitts, denn damit lassen sich eigene Bücher füllen. Aber wir zeigen Ihnen, wie Sie Skripts sinnvoll in Ihr Umfeld integrieren können.
Sie finden weitere Informationen zu Skripts in Gruppenrichtlinien unter den Artikelnummern cc740163 und cc758918. Allgemeine Informationen zum Erstellen von Skripts finden Sie unter den Artikelnummern bb490869 (Batchdateien) und bb410849.

Asynchron oder synchron

Für Startskripts und Anmeldeskripts können Sie festlegen, ob diese asynchron oder synchron ausgeführt werden sollen (Pfad Richtlinien/Administrative Vorlagen/System/Skripts unter Computerkonfiguration und Benutzerkonfiguration in GPEdit).

Asynchron bedeutet, dass alle Skripts unabhängig voneinander in eigenen Prozessen gleichzeitig gestartet werden. Damit ist verbunden, dass ein Skript nicht auf ein anderes warten kann oder muss, aber auch, dass die Laufzeit der Skripts keine Rolle spielt. Im Gegensatz dazu bedeutet synchron, dass Skripts einzeln und eines nach dem anderen ausgeführt werden. Dadurch ist die Reihenfolge der Skripts eindeutig definiert, aber die Laufzeit der Skripts wird ein kritischer Faktor für den Computerstart oder die Benutzeranmeldung.


Für Anmeldeskripts heißt die entsprechende Einstellung Anmeldeskripts gleichzeitig ausführen. Damit ist gemeint, dass Anmeldeskripts synchron ausgeführt werden, also nacheinander und gerade nicht gleichzeitig.

Die Standardeinstellung für Startskripts (Computer) ist synchron (nacheinander), für Anmeldeskripts (Benutzer) asynchron (gleichzeitig). Abmeldeskripts und Skripts zum Herunterfahren werden immer synchron (nacheinander) ausgeführt. 
Bei Anmeldeskripts müssen Sie zusätzlich noch eine technische Abhängigkeit vom Ausführungsmodus beachten. Werden Anmeldeskripts synchron ausgeführt, dann findet die Ausführung innerhalb des Winlogon-Prozesses statt, bevor der Desktop erscheint. Werden sie dagegen asynchron ausgeführt, dann findet die Ausführung innerhalb des Explorer-Prozesses statt, der auch den Desktop darstellt, also auf der Benutzeroberfläche.

Wie und wo aufrufen?

Für das Starten von Skripts gibt es viele Möglichkeiten, die jeweils bestimmte Ausführungseigenschaften des Skripts bereitstellen.

  • Computerkonfiguration/Richtlinien/Windows-Einstellungen/Skripts/Starten
    Startmodus: Asynchron oder synchron, Kontext: SYSTEM

  • Computerkonfiguration/Richtlinien/Windows-Einstellungen/Skripts/Herunterfahren
    Startmodus: Synchron, Kontext: SYSTEM

  • Benutzerkonfiguration/Richtlinien/Windows-Einstellungen/Skripts/Anmelden
    Startmodus: Asynchron oder synchron, Kontext: Benutzer

  • Benutzerkonfiguration/Richtlinien/Windows-Einstellungen/Skripts/Abmelden
    Startmodus: Synchron, Kontext: Benutzer

  • Computerkonfiguration/Richtlinien/Administrative Vorlagen/System/Anmelden: Diese Programme bei der Benutzeranmeldung ausführen
    Startmodus: Asynchron, Kontext: Benutzer

  • Benutzerkonfiguration/Richtlinien/Administrative Vorlagen/System/Anmelden: Diese Programme bei der Benutzeranmeldung ausführen
    Startmodus: Asynchron, Kontext: Benutzer

  • Computerkonfiguration/Einstellungen/Windows-Einstellungen/Verknüpfungen – Speicherort: Alle Benutzer – Start
    Startmodus: Asynchron, Kontext: Benutzer

  • Benutzerkonfiguration/Einstellungen/Windows-Einstellungen/Verknüpfungen – Speicherort: Alle Benutzer – Start oder Starten
    Startmodus: Asynchron, Kontext: Benutzer

  • Computerkonfiguration/Einstellungen/Systemsteuerung/Geplante Aufgaben – Trigger: Beim Start
    Startmodus: Asynchron, Kontext: Taskbenutzer (SYSTEM, Benutzer oder andere)

  • Benutzerkonfiguration/Einstellungen/Systemsteuerung/Geplante Aufgaben – Trigger: Beim Start oder Bei Anmeldung
    Startmodus: Asynchron, Kontext: Taskbenutzer (SYSTEM, Benutzer oder andere)

  • Computerkonfiguration/Einstellungen/Windows-Einstellungen/Registrierung – Struktur: HKLM, Schlüsselpfad: Software\Microsoft\Windows\CurrentVersion\Run
    Startmodus: Asynchron, Kontext: Benutzer

  • Benutzerkonfiguration/Einstellungen/Windows-Einstellungen/Registrierung – Struktur: HKLM oder HKCU, Schlüsselpfad: Software\Microsoft\Windows\CurrentVersion\Run
    Startmodus: Asynchron, Kontext: Benutzer

  • Computerkonfiguration/Einstellungen/Windows-Einstellungen/Registrierung – Struktur: HKLM, Schlüsselpfad: Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run
    Startmodus: Asynchron, Kontext: Benutzer

  • Benutzerkonfiguration/Einstellungen/Windows-Einstellungen/Registrierung – Struktur: HKLM oder HKCU, Schlüsselpfad: Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run
    Startmodus: Asynchron, Kontext: Benutzer
Der Registrierungsschlüssel Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run ist im Ergebnis identisch mit der Richtlinieneinstellung Diese Programme bei der Benutzeranmeldung ausführen, die den gleichen Registrierungsschlüssel verwendet. GPP Registrierung als Ergänzung von Administrative Vorlagen ermöglicht aber besondere Konfigurationen, die wir z.B. in einem zukünftigen Blogbeitrag Bildschirmschoner je nach Computer (-gruppe) festlegen verwenden.

Wenn Sie alle diese Möglichkeiten verwenden, geht allerdings der Überblick über die implementierten Skripts verloren. Daher ist eine Bewertung erforderlich, welche Möglichkeiten gut oder weniger gut geeignet sind. Für die Bewertung können Sie folgende Kriterien verwenden:
  • Müssen Skripts abgeschlossen sein, bevor der Start oder die Anmeldung fortgesetzt werden darf? Dann müssen sie synchron ausgeführt werden.

  • Benötigen Skripts eine längere Zeit? Dann sollten sie asynchron ausgeführt werden.

  • Muss auf Dateien, Ordner oder Registrierungswerte zugegriffen werden, auf die der Benutzer keine Schreibrechte besitzt? Dann muss der Kontext von SYSTEM verwendet werden.

  • Muss auf Dateien, Ordner oder Registrierungswerte im Benutzerprofil zugegriffen werden? Dann muss der Kontext des Benutzers verwendet werden.

Aus der praktischen Erfahrung empfehlen wir Ihnen, bevorzugt folgende Möglichkeiten zu verwenden:

  • Computerkonfiguration/Richtlinien/Windows-Einstellungen/Skripts/Starten (Richtlinie Startskripts asynchron ausführen aktivieren)

  • Benutzerkonfiguration/Richtlinien/Windows-Einstellungen/Skripts/Anmelden (Richtlinie Anmeldeskripts gleichzeitig ausführen aktivieren)

  • Computerkonfiguration/Einstellungen/Windows-Einstellungen/Registrierung – Struktur: HKLM, Schlüsselpfad: Software\Microsoft\Windows\CurrentVersion\Run

  • Benutzerkonfiguration/Einstellungen/Windows-Einstellungen/Registrierung – Struktur: HKLM oder HKCU, Schlüsselpfad: Software\Microsoft\Windows\CurrentVersion\Run

Damit erreichen Sie eine einfache Verwaltbarkeit bei gleichzeitig großer Flexibilität. Die asynchronen Startskripts eignen sich für viele Aufgaben, auch für solche, die länger benötigen (z.B. das Kopieren einer größeren Menge von Dateien). Die synchronen Anmeldeskripts stellen sicher, dass der Benutzer noch keinen Desktop und damit auch keine Anwendungen geöffnet hat. Sie sollten allerdings nur eine kurze Laufzeit haben. Für länger laufende Skripts im Benutzerkontext wird mit Hilfe von GPP Registrierung der Registrierungsschlüssel Software\Microsoft\Windows\CurrentVersion\Run verwendet, der die gleiche Funktion hat wie Diese Programme bei der Benutzeranmeldung ausführen. Mit GPP Registrierung können Sie aber den Vorteil der Zielgruppenadressierung von Group Policy Preferences nutzen, und Sie können Umgebungsvariablen verwenden.

Die Richtlinieneinstellung Diese Programme bei der Benutzeranmeldung ausführen unterstützt grundsätzlich Umgebungsvariablen. Dafür muss in der Registrierung der Wertetyp REG_EXPAND_SZ verwendet werden. In der zugehörigen ADM(X)-Vorlage ist allerdings REG_SZ als Wertetyp festgelegt, Umgebungsvariablen werden daher nicht aufgelöst. Durch Verwenden von GPP Registrierung wird diese Einschränkung umgangen.

Hinweis: Dieser Blogbeitrag ist ein Auszug aus dem Buch »Windows Server 2012 R2 - Gruppenrichtlinien«, erschienen bei Microsoft Press. 

Druck-ISBN 978-3-86645-695-2
PDF-ISBN    978-3-8483-3067-6
EPUB-ISBN  978-3-8483-0226-0
MOBI-ISBN  978-3-8483-1203-0

Wer mehr lesen möchte, dem empfehle ich, sich dieses Buch zuzulegen – es gibt in deutscher Sprache kein besseres Referenzwerk.

Das Buch kann in allen Buchläden und –shops erworben werden, z.B. bei Amazon oder Thalia. (C) 2014 O'Reilly Verlag GmbH & Co. KG, Balthasarstraße 81, 50670 Köln.

Saturday, April 12, 2014

GPOs in der Praxis (2): Gruppenrichtlinien für Anwendungen

Wir schlagen vor, für Anwendungen eigene Gruppenrichtlinien zu erstellen. Dabei kann es erforderlich sein, z.B. für unterschiedliche Office-Versionen (2003, 2007, 2010) auch unterschiedliche Einstellungen vorzunehmen. Für die Abfrage einer bestimmten Anwendung gibt es in WMI-Filtern drei Möglichkeiten:
  • Die Abfrage der installierten Anwendung mit Win32_Product
  • Die Suche nach der ausführbaren Datei mit CIM_DataFile
  • Die Verwendung von GPP Umgebung mit Zielgruppenadressierung in Kombination mit einer WMI-Abfrage von Win32_Environment

Abfragen mit Win32_Product

Von der Verwendung von Win32_Product raten wir ausdrücklich ab. Wir haben bereits gezeigt, wie Sie die Dauer von WMI-Abfragen mit PowerShell ermitteln können. Die Abbildung 10.21 zeigt die Abfrage von Win32_Product auf einem Computer mit Windows 8, auf dem lediglich das Betriebssystem installiert ist, aber keine weiteren Anwendungen.

Abbildung 10.21: Messen der Dauer einer Abfrage von Win32_Product

Die Abfrage von Win32_Product benötigt auf diesem Computer nur 157 Millisekunden.

Die Abbildung 10.22 zeigt das Ergebnis der gleichen Abfrage auf einem anderen Computer mit Windows 7, auf dem eine praxisnahe Anzahl von Anwendungen installiert ist.

Abbildung 10.22: Lange Dauer der Abfrage von Win32_Product

Die Abfrage von Win32_Product benötigt hier mehr als 16 Sekunden. Wenn mehrere Gruppenrichtlinien mit WMI-Filtern verknüpft sind, addieren sich die Zeiten der einzelnen WMI-Filter. So können sich bei Verwendung von Win32_Product schnell Wartezeiten von mehreren Minuten für die Auswertung der WMI-Filter ergeben. Das gilt es unbedingt zu vermeiden!
Die Klasse Win32_Product ist nicht für Geschwindigkeit optimiert. Abhängig von der Anzahl der installierten Anwendungen kann eine Abfrage von Win32_Product mehrere Minuten benötigen. Die Auswertung der entsprechenden WMI-Filter verzögert den Start des Computers und die Anmeldung des Benutzers entsprechend.
Ab Windows Vista SP2 und Windows 7 SP1 gibt es eine Sicherheitsfunktion in der Auswertung von WMI-Filtern, die nach 30 Sekunden aktiv wird, wenn die WMI-Abfrage noch kein Ergebnis geliefert hat. Die WMI-Abfrage wird dann abgebrochen und der WMI-Filter als falsch ausgewertet.

Abfragen mit CIM_DataFile

Die Abfrage mit CIM_DataFile ist gegenüber Win32_Product sehr schnell, allerdings muss der genaue Pfad der ausführbaren Datei bekannt sein, und Umgebungsvariablen wie z.B. %ProgramFiles% können nicht verwendet werden.

Abbildung 10.23: WMI-Abfrage für Internet Explorer 10 mit CIM_DataFile

Zielgruppenadressierung und WMI-Filter

Die aus unserer Sicht eleganteste und flexibelste Möglichkeit zur Abfrage von Anwendungen ist die Kombination von zwei Techniken: Zunächst verwenden wir die Zielgruppenadressierung von Group Policy Preferences, um die Anwendung zu ermitteln. Abhängig vom Ergebnis erstellen wir eine Umgebungsvariable. Diese Umgebungsvariable verwenden wir in einem WMI-Filter für die jeweilige Anwendung. Die folgenden Abbildungen zeigen dieses Vorgehen beispielhaft für Microsoft Office 2010 und Office 2003. Für andere Anwendungen können Sie das gleiche Vorgehen verwenden, und alle Umgebungsvariablen, die Sie für die Identifikation von Anwendungen und Anwendungsversionen benötigen, können Sie in einer einzigen Gruppenrichtlinie zusammenfassen.

Abbildung 10.24: Erstellen einer Umgebungsvariablen für die Erkennung von Microsoft Office

Die hier als Wert verwendete Umgebungsvariable %OfficeVersion% existiert noch nicht. Sie wird erst mit Hilfe der Zielgruppenadressierung auf der Registerkarte »Gemeinsame Optionen« erstellt. Hier legen wir auch fest, dass die Variable gelöscht werden soll, wenn die Zielgruppenadressierung kein Ergebnis liefert (Option Element entfernen, wenn es nicht mehr angewendet wird).

Abbildung 10.25: Gemeinsame Optionen

Die Zielgruppenadressierung stellt für die Abfrage von Anwendungen das Element MSI-Abfrage bereit, mit dem nicht nur das Vorhandensein von Anwendungen geprüft werden kann, sondern auch Eigenschaften der Anwendung abgerufen werden können. Wir fragen die Hauptversion (Informationselementname VersionMajor) von MS Office ab und speichern diese in der Variable %OfficeVersion%, die wir dann als Wert in die Umgebungsvariable %MSOFFICEVERISON% schreiben.
Variablen, die innerhalb der Zielgruppenadressierung verwendet werden, existieren nur temporär. Die Variable %OfficeVersion% im Beispiel kann daher nicht außerhalb der Gruppenrichtlinie verwendet werden.




Abbildung 10.26: Zielgruppenadressierung und Abfrage der Office-Version

Mehrere Office-Versionen gleichzeitig auf einem Computer sind i.d.R nicht installiert. Die Zielgruppenadressierung liefert also trotz der Oder-Verknüpfung der Elemente ein eindeutiges Ergebnis. Im Beispiel wird Office 2010 Professional oder Office 2003 Professional gefunden. Die Variable %OfficeVersion% enthält dann entweder 14 oder 11. Wird keine Office-Version gefunden, wird die Umgebungsvariable %MSOFFICEVERSION% gelöscht.
Die für MSI-Abfragen erforderlichen Produktcodes können über die Durchsuchen-Schaltfläche ermittelt werden, wenn die Anwendung auf dem aktuellen Computer für den aktuellen Benutzer installiert ist. Alternativ können Sie folgende Befehle verwenden:
  • In der Eingabeaufforderung:wmic product where (name like "%office%") get name, identifyingnumber, version
  • In PowerShell:Get-WmiObject –Class Win32_Product –Filter "name like '%office%'" | Format-List –Property Name, IdentifyingNumber, Version
Über den Namen kann das jeweilige Office-Produkt identifiziert und der zugehörige Produktcode (Eigenschaft IdentifyingNumber) in das Eingabefeld übernommen werden.
Statt der MSI-Abfrage können Sie natürlich auch die Dateiübereinstimmung verwenden. Hier haben Sie aber nicht die Möglichkeit, bestimmte Informationen in einer Variablen zu speichern und diese als Inhalt der Umgebungsvariablen festzulegen. Sie müssen dann also für jede Übereinstimmung eine eigene Umgebungsvariable mit passendem Inhalt definieren.
 
Für die Umgebungsvariable %MSOFFICEVERSION% erstellen wir einen WMI-Filter, der den Namen der Variablen und den Inhalt abfragt. Für Office 2010 verwenden wir dabei folgende Abfrage:

Abbildung 10.27: WMI-Abfrage für die Office-Version 14

Der einzige Nachteil dieser Vorgehensweise ist, dass der WMI-Filter erst bei der zweiten Gruppenrichtlinien-Verarbeitung wahr werden kann, da bei der ersten Verarbeitung die Umgebungsvariable erstellt wird, nachdem WMI-Filter bereits ausgewertet wurden. Auch nach Produktaktualisierungen sind zwei Gruppenrichtlinien-Verarbeitungen erforderlich.

Diesen Nachteil können Sie vermeiden, wenn Sie folgenden Trick anwenden:
  • Die Umgebungsvariable mit der Zielgruppenadressierung wird unter Computerkonfiguration erstellt
  • Die Anwendungskonfiguration wird mit Benutzereinstellungen durchgeführt
Da beim Starten und bei der Anmeldung zuerst Gruppenrichtlinien für den Computer verarbeitet werden, existiert die Umgebungsvariable dann bereits, wenn später Gruppenrichtlinien für den Benutzer verarbeitet werden.

Hinweis: Dieser Blogbeitrag ist ein Auszug aus dem Buch »Windows Server 2012 R2 - Gruppenrichtlinien«, erschienen bei Microsoft Press. 

Druck-ISBN 978-3-86645-695-2
PDF-ISBN    978-3-8483-3067-6
EPUB-ISBN  978-3-8483-0226-0
MOBI-ISBN  978-3-8483-1203-0

Wer mehr lesen möchte, dem empfehle ich, sich dieses Buch zuzulegen – es gibt in deutscher Sprache kein besseres Referenzwerk.

Das Buch kann in allen Buchläden und –shops erworben werden, z.B. bei Amazon oder Thalia. (C) 2014 O'Reilly Verlag GmbH & Co. KG, Balthasarstraße 81, 50670 Köln.