Terminalserver/RDS 2016: Falscher Standarddrucker bei manchen Anwendungen

Problem:
Wir haben seit längerem das Problem, dass auf Terminalserver basierend auf Server 2016 der Standarddrucker nicht korrekt gesetzt wird. Das passiert aktuell inicht bei allen Anwendungen sondrn nur bei älteren Applikationen. Nach etwas Recherche hat sich herausgestellt, dass sich beim Server 2016 bzgl. des Standarddruckers in der Registry etwas geändert hat und einige ältere Applikationen den neuen Pfad nicht abfragen bzw. mit einer alten Routine hier den Standarddrucker ermitteln.

Ursache:
Früher war der Standarddrucker hier gesetzt:
HKCU\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows\Devices

Neu seit Server 2016 ist es dieser Pfad, der sich immer wieder ändert:
HKCU\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows\SessionDefaultDevices\S-1-5-5-0-xxxxxxxxx

Lösung:
Da wir die problematischen Anwendungen nicht selbst ändern konnten und der Hersteller das Problem nicht lösen wollte/konnte, mussten wir uns etwas einfallen lassen. Ich habe hierzu ein Skript gefunden, welches den Standarddrucker aus dem neuen Pfad ausliest und dann im alten Pfad setzt.
Folgendes habe ich dazu eingerichtet:

1.) Das Skirpt zum Auslesen und Setzen des Standarddruckers:
Option Explicit
 On Error Resume Next
 Const HKCU = &H80000001
 Dim strComputer, objReg, strOrigPath, strNewPath, arrKeys, strKey, strPrinter

strComputer = "."
 Set objReg = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & _ 
  strComputer & "\root\default:StdRegProv")
 strOrigPath = "Software\Microsoft\Windows NT\CurrentVersion\Windows\SessionDefaultDevices"
 strNewPath = "Software\Microsoft\Windows NT\CurrentVersion\Windows"

objReg.EnumKey HKCU, strOrigPath, arrKeys
 For Each strKey In arrKeys
     objReg.GetStringValue HKCU, strOrigPath & "\" & strKey, "Device", strPrinter
     If strPrinter <> vbNull Then
      objReg.SetStringValue HKCU, strNewPath, "Device", strPrinter
     End If
 Next

Set strComputer = Nothing
 Set objReg = Nothing
 Set strOrigPath = Nothing
 Set strNewPath = Nothing
 Set arrKeys = Nothing
 Set strKey = Nothing
 Set strPrinter = Nothing


Ich habe dann die Applikation über eine Batch-Datei starten lassen und darin das VBS zusätzlich laufen lassen:

REM Startskript für Applikation
start \\server\freigabe\anwendung.exe

REM Kurze Wartezeit um RDS-Session aufzubauen und Drucker zu mappen
ping 127.0.0.1 -n 10 > nul

REM Setzen des Default-Printers im Legacy Registrykey
start \\server\freigabe\set_printer.vbs


Quellen zur Lösung:
RemoteApp Default Printer Redirection Not Working in Server 2016
Default Printer not Mapped Properly within ICA Session
“Das einzig sichere System müsste ausgeschaltet, in einem versiegelten und von Stahlbeton ummantelten Raum und von bewaffneten Schutztruppen umstellt sein.”
Gene Spafford (Sicherheitsexperte)