Gruppenrichtlinien mit PowerShell bearbeiten

Mit der PowerShell lassen sich nicht nur Gruppenrichtlinien sichern und importieren sondern auch geziehlt einzelne Einstellungen mittels „Set-GPRegistryValue“ anpassen.

Wie im letzten Beitrag (https://jans.cloud/2019/08/microsoft-fslogix-profile-container/) bereits genutzt, hier ein wenig mehr zum Arbeiten mit / in Gruppenrichtlinien-Objekten und der PowerShell.

Warum nicht einfach einmalig Konfigurieren, dann sichern, und in der Zielumgebung importieren?

  1. Darum!
  2. Weil ichs kann!
  3. Wie im Beispiel unten zu sehen ist, ist sicherlich nicht in jeder Umgebung z.B. der Remotedesktop-Lizenzserver „rdslic01.jans.cloud“ ;). Ebenfalls könnten sich Domain-Namen, Profilspeicherorte, etc. pp. ändern, was eine „händische“ Anpassung (oder eine Anpassung per „Migration Table„) mit sich ziehen würde.
  4. Am Ende des Tages läuft es sicherlich auf eine Mischung von vorhandenen zu importierenden GPO-Sets raus, wo an entsprechender Stelle die „Dynamik“ per GPO und den Set- / Get-GPRegistryValue-CMDLets erfolgt.

Daher legen wir los: Im ersten Step lege ich einfach ein leeres GPO an und schaue einmal, getreu dem Motto „Doof darf man sein, man muss sich nur zu helfen wissen“, mit Get-GPRegistryValue nach, was ich da so finde, um es später einfach mit Set-GPRegistryValue zu ändern. Leider nein, leider gar nicht. Das endet im Fehler. Daher setzen wir doch einfach einmal drei „Test Keys“ in der neu erstellten Richtlinie und schauen erneut nach.

Get-GPRegistryValue : Die folgende Gruppenrichtlinien-Registrierungseinstellung wurde nicht gefunden: „HKEY_LOCAL_MACHINE\Software“.
Parametername: keyPath
In Zeile:1 Zeichen:1
Get-GPRegistryValue „C_Mein_TestGPO“ -Key „HKLM\Software“
~~~~~~~~~~~~~ CategoryInfo : InvalidArgument: (Microsoft.Group…tryValueCommand:GetGPRegistryValueCommand) [Get-GPRegistryValue], ArgumentException
FullyQualifiedErrorId : UnableToRetrievePolicyRegistryItem,Microsoft.GroupPolicy.Commands.GetGPRegistryValueCommand

PowerShell Fehler „Get-GPRegistryValue“ bei leerem GPO
$GPOObject = New-GPO "C_Mein_TestGPO"

# Endet im Fehler (Bild 1)
Get-GPRegistryValue "C_Mein_TestGPO" -Key "HKLM\Software"
# Die Remotedesktop-Lizenzierung wurde gesetzt (Bild 2 und 3)
Get-GPRegistryValue "C_Mein_TestGPO" -Key "HKLM\Software"
# Weiterhangel.. (Bild 4)
Get-GPRegistryValue "C_Mein_TestGPO" -Key "HKLM\Software\Policies"
# Bis zum Ende (Bild 5)
Get-GPRegistryValue "C_Mein_TestGPO" -Key "HKLM\Software\Policies\Microsoft\Windows NT\Terminal Services"

Schaut man sich die Ergebnisse etwas „genauer“ an, stellt man sicherlich fest, dass das ganze ja der Registry ziemlich nahe kommt bzw. identisch mit dem ist, was später auf dem Client im Policy-Zweig ankommt *Magic*. 😉 Zum Setzen / Ändern der Einstellungen im GPO geht es direkt mit Set-GPRegistryValue weiter. Dazu wird benötigt:

  1. Name oder GuId des GPO (C_Mein_TestGPO)
  2. Key (KeyPath vom CMDlet Get-GPRegistryValue (oben Bild 5)
  3. ValueName (Ebenfalls Bild 5)
  4. Value (siehe Bild 5)
  5. Type (Bild 5)
# Das jeweilige "Gegenteil" wird konfiguriert:
Set-GPRegistryValue "C_Mein_TestGPO" -Key "HKLM\Software\Policies\Microsoft\Windows NT\Terminal Services" -ValueName fDisableTerminalServerTooltip -Value 0 -Type DWord
Set-GPRegistryValue "C_Mein_TestGPO" -Key "HKLM\Software\Policies\Microsoft\Windows NT\Terminal Services" -ValueName LicensingMode -Value 2 -Type DWord
Set-GPRegistryValue "C_Mein_TestGPO" -Key "HKLM\Software\Policies\Microsoft\Windows NT\Terminal Services" -ValueName LicenseServers -Value "rdslica01.dertest.org" -Type String

# Eine Einstellung wird auf "Nicht konfiguriert" zurückgesetzt:
Set-GPRegistryValue "C_Mein_TestGPO" -Key "HKLM\Software\Policies\Microsoft\Windows NT\Terminal Services" -ValueName fDisableTerminalServerTooltip -Disable

# Der ganze Zweig wird auf "Nicht konfiguriert" zurückgesetzt:
Set-GPRegistryValue "C_Mein_TestGPO" -Key "HKLM\Software\Policies\Microsoft\Windows NT\Terminal Services" -Disable

Hier gehe ich noch auf Punkt 4 „Am Ende des Tages“ mit einem Besipielszenario ein: Es wird ein neues GPO erstellt, verlinkt, eine Sicherung* importiert und der RDS-Lizenzierungs-Host angepasst.

* Die Sicherung habe ich bereits vorbereitet und bei mir unter „C:\Install\GPOs\C_RDSLizenzierung“ abgelegt

$RDSLicHost = $("rdslic01" + "." + $env:USERDNSDOMAIN.ToLower())
do{
    $LinkGPOToOU = Get-ADOrganizationalUnit -Filter * | Select-Object Name, DistinguishedName | Sort-Object Name | Out-GridView -Title "Wo soll das GPO verlinkt werden?" -PassThru
}until($LinkGPOToOU)
$LinkGPOToOU = Get-ADOrganizationalUnit $LinkGPOToOU.DistinguishedName

$LatestBackupID = $(Get-ChildItem -Path "C:\Install\GPOs\C_RDSLizenzierung" | Sort-Object LastWriteTime -Descending | Select-Object -First 1).Name.Split("{")[1].Split("}")[0]

$NewGPO = New-GPO "C_RDSLizenzierung" | New-GPLink -Target $LinkGPOToOU.DistinguishedName -LinkEnabled Yes
Import-GPO -TargetGuid $NewGPO.GpoId -BackupId $LatestBackupID -Path "C:\Install\GPOs\C_RDSLizenzierung"

Set-GPRegistryValue -GuId $NewGPO.GpoId -Key "HKLM\Software\Policies\Microsoft\Windows NT\Terminal Services" -ValueName LicenseServers -Value $RDSLicHost -Type String

Was passiert hier eigentlich?

  1. Der FQDN des Lizenzierungshosts wird mit dem Host „rdslic01“ und der „USERDNSDOMAIN“ erstellt
  2. Die OUs der aktuellen Domäne werden solange ausgelesen bis eine OU ausgewählt wird
  3. Da eine GPO-Vorlage durchaus schonmal angepasst werden kann, suche ich mir im Sicherungs-Ordner die neuste Version aus und schneide die führende „{“ und abschließende „}“ ab
  4. Das neue GPO wird erzeugt und direkt an die in Schritt 2 auerkorene OU verlinkt
  5. Der eigentliche Import des GPOs
  6. Anpassung des Lizenzierungshosts an die aktuelle Umgebung

Abschließende Anmerkung: Wer die Einstellungen nicht händisch durchklicken möchte, um diese dann mittels Get-GPRegistryValue auszulesen und später mit Set-GPRegistryValue zu setzen, der darf sich gerne bei der Group Policy Search oder GetADMX bedienen.

XenApp / XenDesktop Single Sign On Citrix Receiver (for Web) – Konfiguration per Gruppenrichtlinien

Zur Konfiguration für XenApp / XenDesktop Single Sign On wird ein aktueller Citrix Receiver (http://www.citrix.com/go/receiver.html?posit=glnav) sowie eine konfigurierte XenApp 7.x Farm benötigt.

CitrixReceiver /silent /includeSSON
CitrixReceiver /silent /includeSSON

Den Receiver nach dem Download mit den Parametern „CitrixReceiver.exe /silent /includeSSON“ (Als Administrator) installieren und den Client neu starten.

Citrix ssonsvr.exe*32
Citrix ssonsvr.exe*32

Nach erfolgten Reboot im Taskmanager prüfen, ob der Prozess „ssonsvr.exe*32“ gestartet wurde (http://support.citrix.com/article/CTX118628)

Ggfs. NetworkProviderOrder prüfen:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\NetworkProvider\Order

Im REG_SZ Wert „ProviderOrder“ PnSson an erster Stelle auflisten.

*UPDATE 16.07.2015*

Ab der Receiver Version 4.3 befinden sich unter „C:\Program Files (x86)\Citrix\ICA Client\Configuration“ admx Templates sowie die dazu gehörigen Language Files adml. Diese einfach in den Policy Definitions Ordner kopieren und mit der gpmc.msc (Gruppenrichtlinienverwaltung) sowie der Konfiguration von XenApp / XenDesktop Single Sign On weitermachen.

*UPDATE 16.07.2015*

*UPDATE 25.08.2015*

Im deutschen ADML File für den HdxFlash-Client gibt es einen Fehler: https://jans.cloud/2015/08/citrix-receiver-4-3-admx-templates-fehler-im-deutschen-adml-file/

*UPDATE 25.08.2015*

An einem Arbeitsplatz / Server die Gruppenrichtlinienverwaltung (gpmc.msc) starten und von einem Arbeitsplatz, auf dem der Citrix Receiver bereits installiert ist, das „icaclient.adm“ Template aus „C:\Program Files (x86)\Citrix\ICA Client\Configuration“ zu einem GPO hinzufügen, welches auf Computer Objekte wirkt. Dadurch ergibt sich die Möglichkeit den Receiver per GPO zu konfigurieren (Computerkonfigurartion -> Richtlinien -> Administrative Vorlagen -> Klassische administrative Vorlagen (ADM) -> Citrix Components).

Citrix Storefront Konfiguration per GPO
Citrix Storefront Konfiguration per GPO
  • <KONTO> -> Kontoname
  • <URL-ZUM-STORE> -> https://storefront.domain.tld/Citrix/Store/discovery
  • <BESCHREIBUNG> -> Beschreibung
Citrix ICA SSO erlauben
Citrix ICA SSO erlauben

Alle Einstellungen außer „Smart Card Authentication“ entsprechen konfigurieren (Smart Card Auth aktivieren, sofern Smart Cards genutzt werden).

„Local user name and password“ -> „Enable pass-through authentication“ und „Allow pass-through authentication for all ICA connections“ anhaken.

Citrix ICA SSO erlauben2
Citrix ICA SSO erlauben2

„Web Interface authentication ticket“ -> Beide Optionen aktivieren.

Internet Explorer Intranet Sites
Internet Explorer Intranet Sites

Damit sich der Internet Explorer und / oder der Citrix Receiver erfolgreich per SSO anmelden kann, muss der Internet Explorer noch entsprechen konfiguriert werden. Dazu entweder händisch die URL des Storefront Servers „https://storefront.domain.tld“ in die „Lokalen Intranet Seiten“ packen. Oder komfortabler per GPO verwalten.

Internet Explorer Liste der Site zu Zonenzuweisung
Internet Explorer Liste der Site zu Zonenzuweisung

Die passenden GPOs dazu finden sich unter Computerkonfiguration / Benutzerkonfigration -> Administrative Vorlagen -> Windows-Komponenten -> Internet Explorer -> Internetsystemsteuerung -> Sicherheitsseite

  • Wertname -> Die URL (* wird als Wildcard akzeptiert)
  • Wert -> 1: Intranet Site; 2: Vertrauenswürdige Seite
Storefront SSO Passthrough
Storefront SSO Passthrough

Zum Schluss muss am Storefront noch „Domain Passthrough“ als Authentifizierungsmöglichkeit aktiviert werden und dem Single Sign On steht nichts mehr im Weg.

Storefront SSO Passthrough2
Storefront SSO Passthrough2

Nur bestimmte Symbole in der Systemsteuerung anzeigen

An einem Terminalserver / Remotedesktopserver kann es durchaus sinnvoll sein, den Usern nur bestimmte Symbole in der Systemsteuerung zu zeigen. Dazu lässt sich wunderbar die Gruppenrichtlinie unter „Benutzerkonfiguration“ -> „Richtlinien“ -> „Administrative Vorlagen“ -> „Systemsteuerung“ -> „Nur angegebene Systemsteuerungssysmbole anzeigen“ verwenden.

Systemsteuerungssysmbole ausblenden
Systemsteuerungssysmbole ausblenden

In dieser Richtlinie müssen die erlaubten Elemente mit ihrem Canonical Name eingetragen werden. Eine Liste der Canonical Names findet man bei Microsoft: http://msdn.microsoft.com/en-us/library/windows/desktop/ee330741%28v=vs.85%29.aspx

Zur Freigabe der Drucker- und der Mailkonfiguration müssen dort die zwei Einträge „Microsoft.DevicesAndPrinters“ und „Mail“ getätigt werden.

Systemsteuerungssysmbole Drucker Mail
Systemsteuerungssysmbole Drucker Mail