Standarddrucker auf dem Terminalserver

Es ist ein bisschen kompliziert mit Druckern. Nicht nur, dass die meisten einem mit unsinnigen Fehlermeldungen auf den Nerv gehen, auch softwaretechnisch nerven diese oft. In diesem Fall sind es zwar nicht direkt die Drucker schuld, aber man hat es nicht leicht, wenn man verschiedene Nutzer zufrieden stellen muss. So z. B. bzgl. des Standarddruckers in den Benutzersitzungen eines Windows-Server-Remotedesktophosts, der weitläufig noch immer eher als „Terminalserver“ bekannt ist.

So gibt es normalerweise folgende Möglichkeiten:

 

Standarddrucker des Clients ignorieren

Wenn die Benutzer auf Ihrem lokalen Rechner oder vllt. sogar nur ThinClient gar keine Drucker installiert haben und auch dort nicht installieren sollen, weil sie sowieso nur auf dem Terminalserver arbeiten, macht es Sinn den Standarddrucker des Clients zu ignorieren und nicht umzuleiten. Meistens sind ansonsten irgendwelche Microsoft-Software-Drucker (z. B. „Microsoft Print to PDF“) vorhanden, die ansonsten als Standarddrucker in die RDP-Sitzung mitgenommen werden.

Deshalb kann man in der GPO unter den Computer-Einstellungen unter „Richtlinien“ -> „Administrative Vorlagen“ -> „Windows-Komponenten“ -> „Remotedesktopdienste“ -> „Remotedesktopsitzungs-Host“ -> „Druckerumleitung“ den Punkt „Standardclientdrucker nicht als Standarddrucker in einer Sitzung festlegen“ aktivieren:

Zusätzlich kann man natürlich, wenn niemand einen lokalen Drucker benötigt, die Druckerumleitung auch einfach komplett abklemmen. Somit erspart man sich etwaige Probleme, falls irgendwelche lokal installierten Drucker umgeleitet werden und versehentlich von Anwendern ausgewählt werden.

 

Standarddrucker des Clients durchschleifen

Wenn man die erwähnte GPO-Einstellung nicht setzt, hat man das Standardverhalten, dass die lokalen Drucker nicht nur durchgeschliefen (benannt mit dem Zusatz „umgeleitet XX“) werden, sondern auch der von diesen auf dem Client-Rechner als Standard definierte Drucker in der RDP-Sitzung ebenfalls als solcher festgelegt wird. Unabhängig davon welcher andere Drucker vllt. in der letzten RDP-Sitzung als Standarddrucker festgelegt worden ist!

 

Kombination nötig?

Etwas tricky wird es, wenn man beide Szenarien kombinieren muss. So etwas kann der Fall sein, wenn ein Benutzer, warum auch immer dies so ist, z. B. einen lokal per USB angeschlossenen Drucker in seiner RDP-Sitzung benutzen muss und dieser der Standarddrucker sein soll. Alle anderen sollen aber trotzdem auf keinen Fall ihren Standarddrucker mit in die Sitzung nehmen, weil dies deren Konfiguration zerschießt. Mit unterschiedlichen GPOs zu hantieren hat an dieser Stelle keinen Sinn, da die entsprechenden Einstellungen Computer-bezogen und nicht Benutzer-bezogen gelten.

 

Lösung: GPO-Loopback

Es gibt für die Gruppenrichtlinien den sogenannten „Loopback-Modus“. Dadurch gelten die Computer-spezifischen Einstellungen der GPO für den Benutzer. Das kann man nutzen. Mich damit aber für eine solche Kleinigkeit zu beschäftigen war mir dann doch zu viel des Guten. Zu mal man die Auswirkungen gut abwägen muss.

 

Lösung: Drucker auf dem Client-PC als Netzwerkdrucker freigeben

Natürlich kann man auch einfach den Drucker auf dem Client-PC als Netzwerkdrucker freigeben und dann auf dem Server einbinden. Leider hat das in meinem Fall zu Problemen mit dem Druckertreiber geführt. Der Druck funktionierte zwar, aber es dauerte Ewigkeiten bis der Druckauftrag verarbeitet wurde und dieser wurde auch nicht aus der Warteschlange entfernt. Es kann aber natürlich auch reibungslos funktionieren.

 

Lösung: USB-zu-LAN-Adapter

Etwas übertrieben, aber wenn man es noch rumliegen hat, kann man den Drucker auch hardwareseitig netzwerkfähig machen und einen USB-zu-LAN-Adapter anschließen. Dieser muss allerdings erst mal konfiguriert werden. Danach ließe sich der Drucker im Idealfall auf dem Druckerserver einrichten und freigeben.

 

Lösung: Standarddrucker durch Startskript ändern

Der Lösungsansatz für den ich mich, insbesondere aufgrund der Treiberprobleme, entschieden habe sieht nichts von alledem vor. Stattdessen soll bei dem betroffenen Benutzer weiterhin der lokale durchgeschliefene Drucker genutzt werden. Dieser wird einfach automatisch durch das Benutzer-Startskript nach einer kurzen Wartedauer zum Standardddrucker umkonfiguriert:

Dieses Skript ist eine Mischung aus Powershell und Batch, was zumindest unter Server 2019 in so einer Mischform ohne Probleme funktioniert.

Mit diesem Befehl setzt man, eigentlich über die Command Line, gefolgt durch den Namen des Druckers den Standarddrucker:

Den Druckernamen ersetzt man in diesem Befehl durch eine „gefilterte“ Powershell-Abfrage. Mit dem Befehl „Get-Printer“ kann man sich alle installierten Drucker ausgeben lassen. Diese Ausgabe schränkt man im Vorfeld nun mittels einer WHERE-Abfrage und dem Property „Name“ ein, um nur den gewünschten Drucker zu behalten. Da man dessen genauen Namen wegen des Zusatzes mit der variierenden Nummer nicht kennt, muss man diesen Namen durch ein Sternchen abkürzen, wodurch man die letzten Zeichen auslässt und alle Drucker die mit diesen Zeichen anfangen angezeigt bekommt. Aus diesem Abfrageergebnis braucht man nur noch den kompletten Namen aus dem entsprechenden Property verwenden:

Wie man dieses als Anmeldeskript verwendet, da dies bei Powershell nicht ohne Umweg funktioniert, zeige ich in einem gesonderten Artikel.

 

Fazit

Solche Sonderbehandlungen für einzelne Geräte oder Benutzer sind eigentlich ein Overkill, denn man könnte die berechtigte Frage stellen warum überhaupt so etwas gemacht wird und nicht ausschließlich Netzwerkdrucker zum Einsatz kommen. Möglich ist es aber und vielleicht kann der ein oder andere für ein ähnliches Szenario etwas mit diesen Informationen anfangen.

 

Schreibe einen Kommentar